Как считать параметры из HTTP-заголовков в HTTP-сервисе 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интеграционных решений на базе 1С часто возникает необходимость передавать дополнительные параметры запроса не через тело сообщения или параметры URL, а через заголовки HTTP-запроса. Давайте разберем, как реализовать чтение этих данных в коде вашего сервиса.

Понимание структуры объекта Запрос

В платформе 1С:Предприятие при обращении к HTTP-сервису обработка входящего вызова происходит в методе, который принимает на вход один параметр — объект типа HTTPСервисЗапрос. Этот объект содержит все необходимые данные для обработки вызова: метод запроса, адрес ресурса, тело запроса и, конечно же, коллекцию заголовков.

Важно помнить, что свойство Заголовки этого объекта представляет собой Соответствие. Это значит, что доступ к данным осуществляется по ключу (имени заголовка), который вы ожидаете получить от вызывающей стороны.

Разбираем процесс получения заголовков

Для того чтобы извлечь данные, переданные в заголовках, нам необходимо обратиться к свойству Заголовки и получить значение по конкретному ключу. Рассмотрим на примере, как это сделать в коде вашего сервиса.

Допустим, вызывающая система (например, Postman или внешняя CRM-система) отправляет нам заголовки с именами Status и Path. В коде 1С мы можем считать их следующим образом:


Функция SED_Dogovor(Запрос)
    // Извлекаем значения из заголовков запроса
    СтатусЗапроса = Запрос.Заголовки["Status"];
    ПутьКФайлу    = Запрос.Заголовки["Path"];
    
    // Выполняем логику обработки
    // ...
КонецФункции

Важные рекомендации при работе с заголовками

Хотя доступ к заголовкам осуществляется просто, при промышленной разработке следует учитывать ряд правил, чтобы сервис был надежным:

  1. Проверка на существование заголовка. Не всегда вызывающая система передает все ожидаемые параметры. Чтобы избежать ошибок, используйте метод Свойство() или проверяйте значение на Неопределено.
  2. Регистрозависимость. Несмотря на то что протокол HTTP определяет заголовки как регистронезависимые, в 1С при работе с Соответствием стоит быть внимательными. Обращайтесь к ключам в том же регистре, в котором их отправляет клиент.
  3. Безопасность. Никогда не доверяйте содержимому заголовков, особенно если они содержат пути к файлам. Обязательно проводите валидацию данных перед тем, как использовать их в операциях обращения к файловой системе или базе данных.

Пример безопасного получения данных

Рассмотрим более надежный способ обработки заголовков, который защитит ваш код от непредвиденных исключений:


Функция SED_Dogovor(Запрос)
    // Используем метод Свойство для проверки наличия заголовка
    Если Запрос.Заголовки.Свойство("Status", Статус) Тогда
        // Здесь мы можем безопасно использовать переменную Статус
    Иначе
        Статус = "По умолчанию";
    КонецЕсли;
    
    // Получение через метод Получить также допустимо
    ПутьКФайлу = Запрос.Заголовки.Получить("Path");
    Если ПутьКФайлу = Неопределено Тогда
        // Обработка ситуации отсутствия обязательного заголовка
    КонецЕсли;
    
    // Формирование ответа
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;
КонецФункции

Когда стоит использовать заголовки, а когда — нет?

При проектировании API помните, что заголовки предназначены для служебной информации (авторизация, тип контента, метаданные). Если вам нужно передать большой объем данных или сложную структуру (например, массив объектов), лучше использовать:

Использование заголовков для передачи огромных строк может привести к ошибкам на стороне прокси-серверов или веб-серверов, таких как Nginx или Apache, которые имеют лимиты на длину HTTP-заголовков. Надеемся, что данный разбор поможет вам легко интегрировать ваш сервис с внешними системами!

← На главную