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