Rest api от чайника для чайников
Цель статьи – указать на подводные камни и нюансы, о которых “не пишут на заборах” и которые встретились мне за время внедрения типового модуля интеграции 1С и Битрикс24. Будет интересна для людей, кто подумывает о том, чтобы настроить интеграцию, и хотят понять, с чем столкнутся. А также для тех, кто уже работает с подобным обменом, столкнулся с какими-то из описанных ситуаций и хочет понять, что пошло не так и “как жить дальше”. Постараюсь все описать “человеческим” языком с минимальной долей терминов, так как статья, надеюсь, будет полезна не только программистам.
07.11.2021
5734
freegman74
13
Интеграция 1с с сайтом (магазином) wordpress (woocommerce) с помощью rest api сайта. часть 1. авторизация
Многие уже знают, что в релизе платформы 8.3.14.1565, браузер Internet Explorer был заменен на Web-Kit, это на самом деле большой шаг вперед, но я уверен, многим, как и мне, пока не совсем понятно, что к чему. Возник опыт использования web-kit в 1С, вызова JS из 1С и вызова 1С из JS. Давайте вместе попробуем понять, чем одно отличается от другого, и заодно сделаем, что-нибудь полезное. Да и наверняка многим придется переписывать свои подобные поделки после обновления на новую платформу, так что надеюсь мой опыт окажется полезным.
2 стартмани
08.12.2022
10348
Бэнни
25
Подготовка и настройка windows server и iis
Для использования API 1C нам необходим веб-сервер, который будет обрабатывать запросы от разрабатываемого нами веб-приложения. Поскольку мы не перестраиваем инфраструктуру, используем уже установленную платформу 1С:Предприятие и конфигурацию 1С:Бухгалтерия Базовая 8.3. В качестве веб-сервера было принято решение не устанавливать сторонние сервисы, а использовать MS IIS.
Запускаем Диспетчер сервера и нажимаем Добавить роль. Ставим галочку напротив Веб-сервер (IIS). В следующем окне проверяем наличие галочек напротив устанавливаемых компонентов.
В следующем окне проверяем наличие галочек напротив устанавливаемых компонентов.
Публикация веб-сервисов 1с для использования его rest api веб-приложением
Публикация веб-сервисов 1С предназначена не только для использования REST API от 1С, но и для работы с 1С:Предприятие через веб-браузер. Для использования этих возможностей, необходимо установить «Модули расширения веб-сервера» через установщик технологической платформы 1С.
Далее открываем пункт меню Администрирование-Публикация на веб-сервере. В открывшемся окне вводим произвольное Имя, указываем веб-сервер (Internet Information Services), ставим галочки «Публиковать стандартный интерфейс OData», а также 2 галочки «Публиковать Web-сервисы».
Реализация rest api в обработке 1c
Выберите уточнение:
Ключевые тезисы:
REST API работает только если при работе с ТСД используется сервер Mobile SMARTS. При прямом подключении ТСД к компьютеру через кабель/крэдл или при обмене с учетной системой через папку использовать REST API не получится.
Функционал REST API в локальном и глобальном ядре полностью идентичен, т.е. код процедур и функций практически полностью совпадает. Поэтому, если требуются доработки, их нужно делать синхронно в 3 местах – глобальное ядро, локальное ядро УФ, локальное ядро ОФ.
Обмен данными между 1С и Mobile SMARTS реализован черезHTTP-запросы из 1С в MS, все запрашиваемые данные передаются в качествепараметров запроса в формате JSON (либо в заголовках, либо в теле запроса), а сервер Mobile SMARTS возвращает ответ в виде: кода состояния и тела ответа в формате JSON.
Коды состояния бывают в диапазоне от 100 до 500 и выше, их можно разделить на следующие группы:
URI – уникальный идентификатор ресурса, используется при каждом запросе. Фактически, это путь до базы вида «http(s)://[имя сервера]:[порт базы Mobile SMARTS]/api/v1».
В обработке для реализации REST API используются прикладные объекты 1С такие как:
В базе Mobile SMARTS может быть включена авторизация, тогда для выполнения HTTP-запросов необходимо будет каждый раз авторизовываться, есть 2 варианта авторизации:
Для выполнения всех запросов используется единый метод 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 | Для начала выгрузки:
Для выгрузки данных:
При ошибке в процессе выгрузки:
Для окончания выгрузки
|
REST_API_ОчиститьТаблицуНаСервере SMARTS | POST | Аналогично процессу выгрузки, только без п.2, т.е., фактически не выгружаем в таблицу никаких данных: Для начала очистки:
Для окончания очистки
|
Работа с документами | ||
REST_API_ПолучитьМетаданные ДокументовMS | GET | Получение списка типов документов – “DocTypes?$expand=tables”
Получение списка доп.таблиц – “TablesInfo” Получение списка пользователей – “Users” Получение списка устройств – “Devices” |
REST_API_ПолучитьСписокДокументовНа СервереSMARTS | GET | “Docs?$expand=declaredItems,currentItems, extendedFields” |
REST_API_ПолучитьДанныеДокументаНа СервереSMARTS | GET | “Docs/” UniДокумента “(‘” ID_Документа “‘)?$expand=declaredItems, currentItems, combinedItems,extendedFields,tables($expand=rows)” |
REST_API_ЗаписатьДокументВБазуSMARTS | POST |
|
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 Ответ сервера:
REST_API_ПолучитьТокенSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/session?username=Логин&pa…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ПолучитьОписаниеБазы
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/BaseInfo
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ПолучитьЗначениеНастройкиБазыSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/CustomSettings('ИмяИнтегр…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ЗаполнитьНастройкиSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/CustomSettings?$filter=name eq ‘ИспользоватьШаблоныВесовогоТовара’ or name eq ‘ПрефиксКодаВесовогоТовара’ or name eq ‘ДлинаКодаВесовогоТовара’ or name eq ‘ЧислоЗнаковПослеЗапятойВесТовара’ or name eq ‘ПрефиксВключенВКодВесовогоТовара’ or name eq ‘РазмерПорцииНоменклатуры’ or name eq ‘ВыгружатьНоменклатуруДокументаПередВыгрузкойДокумента’ or name eq ‘УстановитьПоискПоНаименованиюИАртикулу’ or name eq ‘ВыгружатьНоменклатуруСразу’ or name eq ‘ВыгружатьКонтрагентовСразу’
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ЗаписатьНастройкиSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/CustomSettings
Заголовки:
Content-Type: application/json
Тело запроса:
{ "value": true, "name": "РаботаБезАлкоголя" } HTTP-метод: POST Код состояния: 200 Ответ сервера:
REST_API_УдалитьНастройкиSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/CustomSettings('Настройки…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: DELETE Код состояния: 204 Ответ сервера: нет
REST_API_ВыгрузитьТаблицуНаСерверSMARTS
Будут выполнены 3 запроса: начать выгрузку, выгрузка, завершить выгрузку (или прервать выгрузку, в случае ошибки), пример дан для выгрузки номенклатуры. В случае выгрузки ячеек или дополнительных таблиц будут изменяться только наименования методов (см. таблицу выше), все остальное выполняется по тому же алгоритму
Запрос 1 — Начать выгрузку
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Products/BeginUploadProducts
Заголовки:
Content-Type: application/json
Тело запроса:
{ "lschema": [ "Product.Name", "Product.Barcode", "Product.ЭтоГруппа", "Product.Marking", "Product.Весовой", "Product.Маркировка", "Packing.Barcode", "Packing.ИмяХарактеристики", "Packing.Name", "Packing.UnitsQuantity", "Product.Алко", "Packing.АлкоКод", "Packing.АлкоОбъем", "Packing.АлкоКрепость", "Product.АлкоМарк", "Packing.АлкоПроизводитель", "Packing.АлкоПроизвИНН", "Packing.АлкоПроизвКПП", "Packing.ТНВЭД", "Packing.Бренд", "Packing.Верх", "Packing.Вид", "Packing.Импортер", "Packing.Размер", "Packing.ИНН", "Packing.ИсходныйGTIN", "Packing.Низ", "Packing.Подкладка", "Packing.Производитель", "Packing.СтранаПроизводства", "Packing.Цвет", "Packing.price", "Packing.qty", "Product.ПоХарактеристикам", "Product.ПоСериям", "Product.ПоСН", "Product.Id", "Product.BasePackingId", "Packing.ИдХарактеристики", "Packing.Id", "Packing.ИдЕдиницыИзмерения", "Product.КлючХарактеристик", "Product.КлючСерий", "Packing.ИдСерии" ], "rewriteProductsBook": true, "useFullTextSearch": true } HTTP-метод: POST Код состояния: 204 Ответ сервера: нет
Запрос 2 — Начать выгрузку
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Products/AddProductsToUpload
Заголовки:
Content-Type: application/json
Тело запроса:
{ "flds": [ "Х-77890 Стинол Завод бытовой техники", "000000094", "false", "Х-77890", "false", "", "2000000058078", "", "шт", "1", "false", "", "0", "0", "false", "", "", "", "", "Стинол", "", "", "", "", "", "2000000058078", "", "", "Завод бытовой техники", "", "", "0", "8", "false", "false", "false", "cbcf4934-55bc-11d9-848a-00112f43529a", "bd72d926-55bc-11d9-848a-00112f43529a", "", "bd72d926-55bc-11d9-848a-00112f43529a", "bd72d926-55bc-11d9-848a-00112f43529a", "", "9c556d55-720f-11df-b436-0015e92f2802", "" ] } HTTP-метод: POST Код состояния: 204 Ответ сервера: нет
Запрос 3 — Завершить выгрузку / прервать выгрузку
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Products/EndUploadProducts (для завершения выгрузки)
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Products/ResetUploadProducts (для прерывания выгрузки)
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: POST Код состояния: 204 Ответ сервера: нет
REST_API_ОчиститьТаблицуНаСервереSMARTS
Аналогично процессу выгрузки, только без запроса 2, т.е., фактически, не выгружаем в таблицу никаких данных:
REST_API_ПолучитьМетаданныеДокументовMS – состоит из 7 запросов
Запрос1 — Получение списка типов документов
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/DocTypes?$expand=tables
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 2 — Получение метаданных и реквизитов шапки документа на примере документа «Агрегация»
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/DocTypes('Agregaciya&…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 3 — Получение метаданных и реквизитов табличной части документа на примере документа «Агрегация»
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/DocTypes('Agregaciya&…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 4 — Получение списка доп.таблиц, которые не определены в метаданных документа, но существуют у самого экземпляра документа на примере документа «Агрегация»
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/DocTypes('Agregaciya&…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 5 — Получение списка дополнительных таблиц
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/TablesInfo
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 6 -— Получение списка пользователей — «Users»
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Users
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
Запрос 7 — Получение списка устройств — «Devices»
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Devices
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ПолучитьСписокДокументовНаСервереSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs?$expand=declaredItems,curren…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ПолучитьДанныеДокументаНаСервереSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs/PrihodNaSklad('7e38b…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: GET Код состояния: 200 Ответ сервера:
REST_API_ЗаписатьДокументВБазуSMARTS
Запрос 1 — Выгрузка шапки документа
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs
Заголовки:
Content-Type: application/json
Тело запроса:
{ "id": "7e38bff7-8faf-11ea-a40c-00155d03e00e", "warehouseId": "1", "ИдКонтрагента": "cbcf497b-55bc-11d9-848a-00112f43529a", "ИдСклада1С": "03ce4b6f-3ff7-11e0-af05-0015e9b8c48d", "ИмяСклада": "Продуктовая база", "ИмяКонтрагента": "База "Продукты"", "DistributeByBarcode": true, "barcode": "167777389647035791856893807099027644430", "РежимУпаковок": "БезУпаковок", "Name": "Приобретение товаров и услуг ТД00-000026 от 06.05.2020 18:37:37", "documentTypeName": "ПриходНаСклад", "НастройкаБизнесПроцесса": "BPe8d6ec5a-7a78-41ba-8b01-820f78b31cdb", "ИмяБП": "Приобретение товаров и услуг (проверка документа на ТСД)", "КонтрольКолва": true } HTTP-метод: POST Код состояния: 201 Ответ сервера:
Запрос 2 —Выгрузка табличных частей документа, например, declaredItems
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs('7e38bff7-8faf-11ea-…
Заголовки:
Content-Type: application/json
Тело запроса:
{ "value": [ { "packingId": "bd72d8fb-55bc-11d9-848a-00112f43529a", "productId": "e8a71fa5-55bc-11d9-848a-00112f43529a", "ИдЕдиницыИзмерения": "bd72d8fb-55bc-11d9-848a-00112f43529a", "Цена": 41, "declaredQuantity": 5 } ] } HTTP-метод: POST Код состояния: 200 Ответ сервера: нет
Запрос 3 — Принудительное сохранение документа, когда все строки уже загружены
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs('7e38bff7-8faf-11ea-…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: POST Код состояния: 204 Ответ сервера: нет
REST_API_УдалитьДокументНаСервереSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs('7e38bff7-8faf-11ea-…
Заголовки:
Content-Type: application/json
Тело запроса:
нет HTTP-метод: DELETE Код состояния: 204 Ответ сервера: нет
REST_API_УстановитьСтатусДокументаНаСервереSMARTS
Строка запроса:
http://10.0.0.29:10501/e1fc20aa-ff42-47df-9e5b-a94ba38b8935/api/v1/Docs('7e38bff7-8faf-11ea-…
Заголовки:
Content-Type: application/json
Тело запроса:
{ "Status": "ОшибкаЗаписи" } HTTP-метод: PATCH Код состояния: 204 Ответ сервера: нет