Обмен Клеверенса и 1С через REST API
REST API — способ взаимодействия и обмена данными сервера (в нашем случае сервера Mobile SMARTS) через HTTP-запросы (GET, POST, PUT, PATCH).
До выхода платформы Mobile SMARTS версии 3.2 в качестве типа интерфейса для обмена данными между 1С и подключенной к ней базой Mobile SMARTS использовалась только компонента Mobile SMARTS. В некоторых случаях она продолжает использоваться и сейчас (например, при прямом обмене с ТСД и обмене через папку), но приоритетным способом обмена, который установлен в базе по умолчанию, на данный момент является REST API.
Преимущества использования REST API:
- компоненты систем взаимодействуют в гораздо большем масштабе;
- все интерфейсы общие;
- части можно внедрять независимо одну от другой;
- есть промежуточные элементы, которые снижают процент задержки и усиливают безопасность соединения.
Реализация REST API в обработке 1C
Ключевые тезисы:
-
REST API работает только если при работе с ТСД используется сервер Mobile SMARTS. При прямом подключении ТСД к компьютеру через кабель/крэдл или при обмене с учетной системой через папку использовать REST API не получится.
-
Функционал REST API в локальном и глобальном ядре полностью идентичен, т. е. код процедур и функций практически полностью совпадает. Поэтому, если требуются доработки, их нужно делать синхронно в 3 местах — глобальное ядро, локальное ядро УФ, локальное ядро ОФ.
-
Обмен данными между 1С и Mobile SMARTS реализован через HTTP-запросы из 1С в MS, все запрашиваемые данные передаются в качестве параметров запроса в формате JSON (либо в заголовках, либо в теле запроса), а сервер Mobile SMARTS возвращает ответ в виде: кода состояния и тела ответа в формате JSON.
-
Коды состояния бывают в диапазоне от 100 до 500 и выше, их можно разделить на следующие группы:
-
200+: запрос успешен, в обработке используются:
- 200 — запрос успешно выполнен;
- 204 — запрос успешно выполнен, но ответ не содержит тела. Используется при выгрузке/очистке справочников Mobile SMARTS, удалении документа Mobile SMARTS, изменении статуса документа Mobile SMARTS.
-
300+: запрос перенаправлен на другой маршрут;
-
400+: ошибка на стороне клиента, в обработке используются:
- 401 — не удалось авторизоваться на сервере Mobile SMARTS для выполнения запроса, например, из-за неверного логина/пароля или по причине того что истек срок действия токена, поэтому потребуется переавторизация.
-
500+: ошибка на стороне сервера.
-
-
URI — уникальный идентификатор ресурса, используется при каждом запросе. Фактически, это путь до базы вида
http (s)://[имя сервера]:[порт базы Mobile SMARTS]/api/v1. -
В обработке для реализации REST API используются прикладные объекты 1С такие как:
- HTTPСоединение — для установления соединения с сервером Mobile SMARTS перед отправкой запросов.
- HTTPЗапрос — для отправки запросов серверу Mobile SMARTS.
- HTTPОтвет — для получения ответов от сервера Mobile SMARTS.
- ЧтениеJSON и метод глобального контекста ПрочитатьJSON () — для преобразования ответа от сервера MS в структуру, массив, соответствие и т. д.
- ЗаписьJSON, ПараметрыЗаписиJSON и метод глобального контекста ЗаписатьJSON () — для формирования тела запроса из параметров в формат JSON.
-
В базе Mobile SMARTS может быть включена авторизация, тогда для выполнения HTTP-запросов необходимо будет каждый раз авторизовываться, есть 2 варианта авторизации:
- BASIC авторизация — в этом случае при каждом HTTP-запросе нужно будет отправлять логин и пароль
- Авторизация с использованием токена — при первом HTTP-запросе передаются логин и пароль, а сервер MS возвращается токен — уникальный идентификатор сессии (access token), который при последующих HTTP-запросах можно будет использовать вместо передачи логина и пароля. Срок действия токена (т.е. сессии) ограничен, поэтому для обновления токена при первом запросе сервер Mobile SMARTS дополнительно возвращает «токен обновления» (refresh token) — он нужен для получения нового токена после истечения срока действия текущего токена.
-
Для выполнения всех запросов используется единый метод REST_API_ВыполнитьМетод (), который подготавливает запрос к выполнению, в него передаются URI, имя метода, параметры метода и отправляемые данные. Далее, из этого метода вызывается вспомогательный метод «REST_API_ВыполнитьHTTPЗапрос ()», которые устанавливает соединение с сервером MS, сериализует данные для отправки в JSON, выполняет запрос, получает ответ от сервера MS и десериализует его из JSON.
-
Всего при обмене данными между 1С и Mobile SMARTS используются 5 видов HTTP-запросов: GET, POST, PATCH, PUT и DELETE.
- GET — используется для получения со стороны севера определенного ресурса (настройку Mobile SMARTS, документ, список документов Mobile SMARTS, метаданные базы Mobile SMARTS). Если вы производите этот запрос, сервер ищет информацию и отправляет ее вам назад. По сути, он производит операцию чтения на сервере. Дефолтный тип запросов.
- POST — нужен для создания определенного ресурса на сервере. Сервер создает в базе данных новую сущность и оповещает вас, был ли процесс создания успешным. По сути, это операции создания настройки Mobile SMARTS, документа Mobile SMARTS, выгрузки справочников Mobile SMARTS.
- PUT и PATCH — используются для обновления определенной информации на сервере, например, статуса документа Mobile SMARTS. В таком случае сервер просто изменяет информацию существующих сущностей в базе данных и оповещает об успехе выполнения операции.
- DELETE— как и следует из названия, удаляет указанную сущность из базы (удаление настройки Mobile SMARTS, документа Mobile SMARTS, очистка справочника Mobile SMARTS) или сигнализирует об ошибке, если такой сущности в базе не было.
Функции для обмена данными и HTTP-методы, которые выполняются в следующих функциях:
| Название функции в 1С для обмена данными с Mobile SMARTS | HTTP-метод | Параметры |
| Общие функции | ||
| REST_API_ПодключитьсяКБазеSMARTS | GET | нет |
| REST_API_ПолучитьОписаниеБазы | GET | BaseInfo |
| REST_API_ПолучитьТоке нSMARTS | GET | username = Логин password = Пароль |
| Работа с настройками | ||
| REST_API_ПолучитьЗначениеНастройки БазыSMARTS | GET | «CustomSettings («+ КлючНастройки + «)» |
| REST_API_ЗаполнитьНастройкиSMARTS | GET | CustomSettings |
| REST_API_ЗаписатьНастройкиSMARTS | POST | CustomSettings name = КлючНастройки value = ЗначениеНастройки |
| REST_API_УдалитьНастройкиSMARTS | DELETE | «CustomSettings («+ КлючНастройки + «)» |
| Работа со справочниками | ||
| REST_API_ВыгрузитьТаблицуНаСервер SMARTS | POST | Для начала выгрузки: 1. для номенклатуры — «Products/BeginUploadProducts» 2. для ячеек — «Cells/BeginUpdate» 3. для прочих сравочников — «Tables/"+ИмяТаблицыENG+ 4. «/BeginOverwrite» Для выгрузки данных: 1. для номенклатуры — «Products/AddProductsToUpload» 2. для ячеек — «Cells» 3. для прочих справочников — «Tables/"+ИмяТаблицыENG При ошибке в процессе выгрузки: 1. для номенклатуры — «Products/ResetUploadProducts» 2. для ячеек — «Cells/ResetUpdate» 3. для прочих справочников — «Tables/"+ИмяТаблицыENG+ 4. «/ResetOverwrite» Для окончания выгрузки 1. для номенклатуры — «Products/EndUploadProducts» 2. для ячеек — «Cells/EndUpdate» 3. для прочих справочников — «Tables/"+ИмяТаблицыENG+"/EndOverwrite» |
| REST_API_ОчиститьТаблицуНаСервере SMARTS | POST | Аналогично процессу выгрузки, только без п. 2, т. е., фактически не выгружаем в таблицу никаких данных: Для начала очистки: 1. для номенклатуры — «Products/BeginUploadProducts» 2. для ячеек — «Cells/BeginUpdate» 3. для прочих сравочников — «Tables/"+ИмяТаблицыENG+ 4. «/BeginOverwrite» Для окончания очистки 1. для номенклатуры — «Products/EndUploadProducts» 2. для ячеек — «Cells/EndUpdate» 3. для прочих справочников — «Tables/"+ИмяТаблицыENG+ 4. «/EndOverwrite» |
| Работа с документами | ||
| REST_API_ПолучитьМетаданные ДокументовMS | GET | Получение списка типов документов — «DocTypes?=tables» 1. Получение реквизитов шапки документа — «DocTypes ('» + 2. СтруктураДокумента.uni + «')?=fields» 3. Получение реквизитов табличной части документа — «DocTypes ('» + 4. СтруктураДокумента.uni + «')?=columns» 5. Получение списка доп.таблиц, которые не определены в метаданных 6. документа, но существуют у самого экземпляра документа — «DocTypes ('» + СтруктураДокумента.uni + «')?=tables (=fields)» Получение списка доп.таблиц — «TablesInfo» Получение списка пользователей — «Users» Получение списка устройств — «Devices» |
| REST_API_ПолучитьСписокДокументовНа СервереSMARTS | GET | «Docs?=declaredItems,currentItems, extendedFields» |
| REST_API_ПолучитьДанныеДокументаНа СервереSMARTS | GET | «Docs/"+UniДокумента+"('"+ID_Документа+"')?=declaredItems, currentItems, combinedItems,extendedFields,tables (=rows)» |
| REST_API_ЗаписатьДокументВБазуSMARTS | POST | 1. Редактировать/добавить документ — «Docs» + данные документа 2. Выгрузить табличную часть, например, declaredItems — «Docs ('"+idДокумента+"')/declaredItems» 3. Принудительное сохранение документа, когда все строки уже загружены — «Docs ('"+idДокумента+"')/EndUpdate» |
| REST_API_УдалитьДокументНаСервере SMARTS | DELETE | «Docs ('"+ID_Документа+"')» |
| REST_API_УстановитьСтатусДокументаНа СервереSMARTS | PATCH | «Docs ('"+ID_Документа+"')» |
Примеры запросов и ответов, используемые при обмене между 1С и Mobile SMARTS:
| 10.0.0.29 | — пример IP-адреса сервера Mobile SMARTS |
| e1fc20aa-ff42-47df-9e5b-a94ba38b8935 | — пример ID базы Mobile SMARTS |
REST_API_ПодключитьсяКБазеSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1
Заголовки:
Content-Type: application/json
Тело запроса:
нет
HTTP-метод:
GET
Код состояния:
200
Ответ сервера:
| Ключ | Значение | Комментарий |
| «@odata.context» | http://localhost:18686/MobileSMARTS/api/v1/ | |
| «value» | Массив | Метаданные базы Mobile SMARTS |
REST_API_ПолучитьТокенSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/session?username=Логин&password=Пароль
Заголовки:
Content-Type: application/json
Тело запроса:
нет
HTTP-метод:
GET
Код состояния:
200
Ответ сервера:
| Ключ | Значение | Комментарий |
| «Expires_in» | 86 400 | Срок действия токена в секундах |
| «Access_token» | «8ee184cb1eb7b4b945a69bbc5bd198a5» | Токен доступа |
| «Token_type» | «bearer» | Тип токена |
| «Refresh_token» | «b8140b77fa61fa5399735ab60f7a9f16» | Токен обновления |
REST_API_ПолучитьОписаниеБазы
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/BaseInfo
Заголовки:
Content-Type: application/json
Тело запроса:
нет
HTTP-метод:
GET
Код состояния:
200
Ответ сервера:
| Ключ | Значение | Комментарий |
| «folder» | «C:\ProgramData\Cleverence\Базы Mobile SMARTS\Склад 15, Полный с Кировкой» | |
| «@odata.context» | http://localhost:18686/MobileSMARTS/api/v1/#BaseInfo | |
| «id» | «e1fc20aa-ff42-47df-9e5b-a94ba38b8935» | |
| «name» | «Склад 15, Полный с Кировкой» | |
| «connectionQRCode» | http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935?altip=VM-WIN10-USR-12 | |
| «appId» | «212E5362-5969-40DC-9781-CB7B8AB811DB» | |
| «appName» | «Склад 15, Полный с Кировкой» | |
| «allConnectionStrings» | Массив | Все возможные варианты строки соединения с базой |
| «comment» | ||
| «appDescription» | Соответствие | Информация о продукте: наименование, ID приложения, версия платформы, ссылки на интернет-ресурсы, комментарий |
| «appInstanceSettings» | Соответствие | Информация о настройках сервера |
REST_API_ПолучитьЗначениеНастройкиБазыSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/CustomSettings
Заголовки:
Content-Type: application/json
Тело запроса:
нет
HTTP-метод:
GET
Код состояния:
200
Ответ сервера: