Для отправки и приема сообщений в СМЭВ посредствам интеграционного узла адаптера (ИУА) можно использовать несколько интерфейсов, в том числе интерфейс «Web-сервис». Web-сервис ИУА реализован для обеспечения информационного взаимодействия по SOAP или REST API протоколу. В текущей статье будут рассмотрены примеры обменов по REST API – технологии на примере работы в приложении Postman.
Установка и подготовка Postman
После установки интеграционного узла адаптера (ИУА) необходимо установить программу Postman, воспользовавшись официальным дистрибутивом. После установки и запуска приложения будет предложено авторизоваться. Этот этап можно пропустить, выбрав опцию использования приложения без авторизации в нижней части окна приложения. Дальше необходимо создать коллекцию запросов (File → New → Collection), в которой будут размещены все необходимые запросы (Рисунок 1).
Рисунок 1 – Создание новой коллекции в Postman.
Для добавления запроса навести на только что созданную коллекцию и по кнопке дополнительного меню выбрать пункт добавить запрос (Рисунок 2).
Рисунок 2 – Создание нового запроса.
В новой открывшейся вкладке запроса можно будет изменить название самого запроса, метод формирования HTTP-запроса, адрес обращения и др. (Рисунок 3).
Рисунок 3 – Окно созданного запроса.
Список доступных методов
Существует три доступных варианта взаимодействия с ИУА через REST API, к ним относятся методы Send (инициализация сообщения), Get (получение сообщения из очереди собственной ИС) и Find (поиск сообщения по заданным критериям).
Для обращения к ИУА по умолчанию будет использоваться основной URL–адрес: http://localhost:7590/ws с указанием метода, например http://localhost:7590/ws/get (при изменении порта обращения 7590 в конфигурации Адаптера на иной следует изменить URL-адрес соответственно). Дополнительно стоит отметить, что все данные будут передаваться в текстовом формате обмена данными JSON.
Для проверки работоспособности ИУА можно воспользоваться существующим видом сведения «Предоставление необходимой для уплаты информации». Для этого необходимо перейти по ссылке и скачать архив «Инструкции и файлы тестирования с эмулятором.zip», который потребуется распаковать и найти в нем эталонный конверт request. Так же для необходимо будет добавит в конверт поле с признаком тестового сообщения: testMessage: true, который необходимо будет добавить в элемент requestMetadata.
Отправка запросов и ответом методом Send
URL–адрес запроса: http://localhost:7590/ws/send
Важным этапом формирования запроса является вставка блока данных запроса в messagePrimaryContent → any. Сперва нужно взять эталонный запрос и отформатировать его в любом удобном редакторе, например, можно использовать Notepad++, используя поиск (Ctrl+F) с заменой элементов. Необходимо учесть следующие требования при изменении XSD-запроса:
- сообщение должно быть одной строкой и не должно содержать каких-либо переносов строк;
- все двойные кавычки должны быть обозначены как спец символы, другими словами перед каждой кавычкой необходимо поставить обратный слеш;
- необходимые пробелы между атрибутами элемента должны быть соблюдены во избежание ошибок.
Описание основных полей блока данных запроса:
- itSystem – код ИС в ИУА;
- requestMessage– описание отправляемого запроса.
В элемент requestMessage входит:
- messageType – тип сообщения (RequestMessageType);
- requestMetadata → clientId – уникальный идентификатор запроса;
- requestMetadata → testMessage – флаг, указывающий на тестовое сообщение, в случае его установки (true) запрос уйдет в эмулятор УВ и ответом будет эталонное сообщение;
- routingInformation – блок маршрутной информации. Применим только для ВС с динамической маршрутизацией;
- requestContent → content - контейнер, включает в себя:
- messagePrimaryContent → any – бизнес-данные запроса, сформированные по XSD-схеме ВС в формате XML;
- attachmentHeaderList – контейнер с информацией о вложениях.
В качестве шаблона запроса может служить следующий пример конверта:
{ "itSystem": "MNEMONIC1", "requestMessage": { "messageType": "RequestMessageType", "requestMetadata": { "clientId": "00000000-0000-0000-0000-000000000000", "testMessage": true }, "requestContent": { "content": { "messagePrimaryContent": { "any": "<tns:MyRequest xmlns:tns='urn://test/1.0.1'> <tns:MyRequestString>test</tns:MyRequestString></tns:MyRequest>" } } } } }
В результате успешного выполнения запроса должен служить следующий ответ от СМЭВ:
{
"itSystem": "MNEMONIC1",
"messageId": "00000000-0000-0000-0000-000000000000"
}
Описание основных полей блока данных ответа:
- itSystem – код ИС в ИУА;
- responseMessage – описание отправляемого ответа.
В элемент responseMessage входит:
- messageType – тип сообщения (ResponseMessageType);
- responseMetadata → clientId – уникальный идентификатор запроса;
- responseMetadata → replyToClientId – уникальный идентификатор запроса, на который направляется данный ответ;
- responseContent → content - контейнер бизнес-данных запроса аналогичный формату запроса.
В качестве шаблона ответа с вложением может служить следующий пример конверта:
{ "itSystem": "MNEMONIC2", "responseMessage": { "messageType": "ResponseMessageType", "responseMetadata": { "clientId": "00000000-0000-0000-0000-000000000000", "replyToClientId": "00000000-0000-0000-0000-000000000000" }, "responseContent": { "content": { "messagePrimaryContent": { "any": "<tns:MyResponse xmlns:tns='urn://test/1.0.1'> <tns:MyResponseString>test</tns:MyResponseString></tns:MyResponse>" }, "attachmentHeaderList": { "attachmentHeader": [ { "filePath": "C:folderdocument.docx" } ] } } } } }
Метод Get (получение запроса и очереди)
URL–адрес запроса: http://localhost:7590/ws/get
Описание основных полей метода получения запроса из собственной очереди:
- itSystem – код ИС в ИУА;
- routerExtraQueue – наименование очереди для получения ответа на запрос;
- specificQuery → messageTypeCriteria – тип сообщения:
- REQUEST – запрос;
- RESPONSE – ответ.
В качестве шаблона получения запроса из очереди может служить следующий пример конверта:
{
"itSystem": "MNEMONIC1"
}
Метод Find (поиск запросов)
URL–адрес запроса: http://localhost:7590/ws/find
Описание основных полей метода поиска запросов:
- isSystem – код ИС в ИУА;
- specificQuery – контейнер, включает варианты запроса сообщений:
- messagePeriodCriteria – включает временной диапазон, за который необходимо получить сообщения;
- messageClientIdCriteria – контейнер временного диапазона, за который необходимо получить сообщения;
- messageCountToReturn – количество сообщений, удовлетворяющих критериям поиска, которое необходимо вернуть;
- messageOffset – размер смещения по списку сообщений или порядковый номер сообщения, с которого начнется отбор запросов.
В элемент messagePeriodCriteria входит:
- from – метка времени, от которой искать сообщения;
- to – метка времени, до которой искать сообщения.
В элемент messageClientIdCriteria входит:
- clientId – уникальный идентификатор запроса;
- clientIdCriteria – определяет тип запроса:
- GET_REQUEST_BY_REQUEST_CLIENTID – получить запрос по клиентскому идентификатору запроса;
- GET_RESPONSE_BY_RESPONSE_CLIENTID – получить ответы на запрос по клиентскому идентификатору ответа на запрос;
- GET_RESPONSE_BY_REQUEST_CLIENTID – получить ответ на запрос по клиентскому идентификатору запроса.
В качестве шаблона поиска первых десяти запросов за период может служить следующий пример конверта:
{ "itSystem": "MNEMONIC1", "specificQuery": { "messagePeriodCriteria": { "from": "2022-01-01T00:00:00+00:00", "to": "2022-01-10T00:00:00+00:00" }, "messageCountToReturn": 10 } }
В качестве шаблона поиска запросов по идентификатору запроса может служить следующий пример конверта:
{
"itSystem": "MNEMONIC1",
"specificQuery": {
"messageClientIdCriteria": {
"clientId": "00000000-0000-0000-0000-000000000000",
"clientIdCriteria": "GET_REQUEST_BY_REQUEST_CLIENTID"
}
}
}