Обработка запроса
Для обработки запросов необходимо для каждого метода в описании HTTP-сервиса создать в модуле HTTP-сервиса метод-обработчик с именем, совпадающим с именем обработчика, заданным в реквизитах метода.
Метод принимает единственный аргумент типа HTTPСервисЗапрос и возвращает ответ типа HTTPСервисОтвет.
Если метод-обработчик не задан, то при вызове сервиса с соответствующим шаблоном и методом вернется результат HTTP 404 Not Found.
Например, самый простой обработчик может выглядеть следующим образом:
метод ДляВсех_Получить(Запрос: HTTPСервисЗапрос)
// Для любого запроса возвращаем результат HTTP 200 Ok
// Код статуса 200 является кодом по умолчанию, поэтому в данном случае обработчик просто оставляем пустым
;
Более сложный обработчик может выглядеть следующим образом:
метод Привет_Получить(Запрос: HTTPСервисЗапрос)
пер Ответ = Запрос.Ответ
// Получаем имя пользователя из параметра
пер Имя = ИмяЗапрос.Параметры.ИмяПользователя
Ответ.Заголовки.Установить("Content-Type", "text/plain")
Ответ.Тело.Записать("Привет, " + Имя)
;
Ответы буферизуются и отправляются полностью, в случае если одновременно выполняются два условия:
- В заголовках ответа нет Content-Length.
- В заголовках ответа нет Transfer-Encoding: chunked.
Во всех остальных случаях ответ отправляется клиенту сразу же по мере записи. Это сделано в основном для сценария REST API, так как в этом случае объем данных заведомо ограничен и для клиента важно правильно обрабатывать возможные ошибки. В случае буферизации ответа «1С:Шина» может отправить ошибочный ответ, даже если ошибка возникла уже в процессе записи ответа.
Заголовок Transfer-Encoding: chunked никогда не добавляется неявно. Если нужно использовать chunked encoding, то вы должны явно установить соответствующий заголовок.