При разработке интеграционных решений на базе 1С часто возникает необходимость передавать дополнительные параметры запроса не через тело сообщения или параметры URL, а через заголовки HTTP-запроса. Давайте разберем, как реализовать чтение этих данных в коде вашего сервиса.
В платформе 1С:Предприятие при обращении к HTTP-сервису обработка входящего вызова происходит в методе, который принимает на вход один параметр — объект типа HTTPСервисЗапрос. Этот объект содержит все необходимые данные для обработки вызова: метод запроса, адрес ресурса, тело запроса и, конечно же, коллекцию заголовков.
Важно помнить, что свойство Заголовки этого объекта представляет собой Соответствие. Это значит, что доступ к данным осуществляется по ключу (имени заголовка), который вы ожидаете получить от вызывающей стороны.
Для того чтобы извлечь данные, переданные в заголовках, нам необходимо обратиться к свойству Заголовки и получить значение по конкретному ключу. Рассмотрим на примере, как это сделать в коде вашего сервиса.
Допустим, вызывающая система (например, Postman или внешняя CRM-система) отправляет нам заголовки с именами Status и Path. В коде 1С мы можем считать их следующим образом:
Функция SED_Dogovor(Запрос)
// Извлекаем значения из заголовков запроса
СтатусЗапроса = Запрос.Заголовки["Status"];
ПутьКФайлу = Запрос.Заголовки["Path"];
// Выполняем логику обработки
// ...
КонецФункции
Хотя доступ к заголовкам осуществляется просто, при промышленной разработке следует учитывать ряд правил, чтобы сервис был надежным:
Свойство() или проверяйте значение на Неопределено.Соответствием стоит быть внимательными. Обращайтесь к ключам в том же регистре, в котором их отправляет клиент.Рассмотрим более надежный способ обработки заголовков, который защитит ваш код от непредвиденных исключений:
Функция SED_Dogovor(Запрос)
// Используем метод Свойство для проверки наличия заголовка
Если Запрос.Заголовки.Свойство("Status", Статус) Тогда
// Здесь мы можем безопасно использовать переменную Статус
Иначе
Статус = "По умолчанию";
КонецЕсли;
// Получение через метод Получить также допустимо
ПутьКФайлу = Запрос.Заголовки.Получить("Path");
Если ПутьКФайлу = Неопределено Тогда
// Обработка ситуации отсутствия обязательного заголовка
КонецЕсли;
// Формирование ответа
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции
При проектировании API помните, что заголовки предназначены для служебной информации (авторизация, тип контента, метаданные). Если вам нужно передать большой объем данных или сложную структуру (например, массив объектов), лучше использовать:
Запрос.ПолучитьТелоКакСтроку() для передачи JSON или XML.Запрос.ПараметрыURL для передачи фильтров и идентификаторов ресурсов.Использование заголовков для передачи огромных строк может привести к ошибкам на стороне прокси-серверов или веб-серверов, таких как Nginx или Apache, которые имеют лимиты на длину HTTP-заголовков. Надеемся, что данный разбор поможет вам легко интегрировать ваш сервис с внешними системами!