Перейти к основному содержимому

HttpСервисЗапрос

Стд::HttpСервисы::HttpСервисЗапрос Доступность: Сервер

Запрос к HTTP-сервису. Экземпляр передается в параметре Запрос обработчика HTTP-сервиса.

Сравнение ссылочное

Иерархия типа

Базовые типы: Объект


Свойства

Заголовки

Доступность: Сервер ТолькоЧтение

Заголовки запроса.

Примеры

В примере в обработчике Http-сервиса получается заголовка запроса "mode". В зависимости от значения заголовка по-разному формируется тело ответа: либо полностью (если заголовок запроса равен "str", то используется метод УстановитьТело, который устанавливает размер тела в заголовке 'Content-Length' ответа), либо частями (если заголовок запроса равен "bin", то используется копирование данных в поток записи тела ответа, при этом устанавливается заголовок 'Transfer-Encoding: chunked').

метод ПрочитатьXmlРесурс(Запрос: HttpСервисЗапрос)
знч Способ = Запрос.Заголовки.ПолучитьПервый("mode")

выбор Способ
когда "str"
знч СодержимоеСтрока = Ресурс{Data.xml}.ОткрытьПотокЧтения().ПрочитатьКакСтроку()
Запрос.Ответ.УстановитьТело(СодержимоеСтрока)
когда "bin"
исп СодержимоеПоток = Ресурс{Data.xml}.ОткрытьПотокЧтения()
СодержимоеПоток.КопироватьВ(Запрос.Ответ.ОткрытьПотокЗаписиТела())
иначе
Запрос.Ответ.УстановитьКодСтатуса(400)
Запрос.Ответ.Заголовки.Установить("Content-Type", "text/plain; charset=utf-8")
Запрос.Ответ.УстановитьТело("Неожидаемое значение заголовка \"mode\"")
;
;

ИмяСервиса

Доступность: Сервер ТолькоЧтение

ИмяСервиса: Строка

Имя HTTP-сервиса.

Примеры

В обработчике Http-сервиса перед выполнением логики обработки запроса для отладки регистрируются данные запроса в журнале событий.

метод СРегистрациейЗапроса(Запрос: HttpСервисЗапрос)
знч СобытиеЖурнала = новый ExecutionEvent(Details = "Запрос Http-сервиса. Имя cервиса: \"%{Запрос.ИмяСервиса}\", имя шаблона: \"%{Запрос.ИмяШаблона}\", путь к ресурсу: \"%{Запрос.ПутьКРесурсу}\", метод: %{Запрос.Метод}")
СобытиеЖурнала.Записать()

// логика обработки запроса
;

ИмяШаблона

Доступность: Сервер ТолькоЧтение

ИмяШаблона: Строка

Имя шаблона URL. В данном шаблоне находится описание HTTP-метода, обработчик которого выполняется.

Примеры

В обработчике Http-сервиса перед выполнением логики обработки запроса для отладки регистрируются данные запроса в журнале событий.

метод СРегистрациейЗапроса(Запрос: HttpСервисЗапрос)
знч СобытиеЖурнала = новый ExecutionEvent(Details = "Запрос Http-сервиса. Имя cервиса: \"%{Запрос.ИмяСервиса}\", имя шаблона: \"%{Запрос.ИмяШаблона}\", путь к ресурсу: \"%{Запрос.ПутьКРесурсу}\", метод: %{Запрос.Метод}")
СобытиеЖурнала.Записать()

// логика обработки запроса
;

Метод

Доступность: Сервер ТолькоЧтение

Метод: Строка

Имя HTTP-метода запроса.

Примеры

В обработчике Http-сервиса перед выполнением логики обработки запроса для отладки регистрируются данные запроса в журнале событий.

метод СРегистрациейЗапроса(Запрос: HttpСервисЗапрос)
знч СобытиеЖурнала = новый ExecutionEvent(Details = "Запрос Http-сервиса. Имя cервиса: \"%{Запрос.ИмяСервиса}\", имя шаблона: \"%{Запрос.ИмяШаблона}\", путь к ресурсу: \"%{Запрос.ПутьКРесурсу}\", метод: %{Запрос.Метод}")
СобытиеЖурнала.Записать()

// логика обработки запроса
;

Ответ

Доступность: Сервер ТолькоЧтение

Объект для записи ответа.

Примеры

Обработчик Http-сервиса возвращает в теле ответа текущее время:

метод ТекущееВремя(Запрос: HttpСервисЗапрос)
Запрос.Ответ.УстановитьТело(Время.Сейчас().ВСтроку())
;

Параметры

Доступность: Сервер ТолькоЧтение

Параметры: ПараметрыUrl

Параметры запроса.

Примеры

В примере в обработчике Http-сервиса получаются параметры запроса "name" и "mode". Значение параметра "name" используется как имя запрашиваемого ресурса. В зависимости от значения параметра "mode" по-разному формируется тело ответа: либо полностью (если параметр запроса равен "str", то используется метод УстановитьТело, который устанавливает размер тела в заголовке 'Content-Length' ответа), либо частями (если параметр запроса равен "bin", то используется копирование данных в поток записи тела ответа, при этом устанавливается заголовок 'Transfer-Encoding: chunked'). В зависимости от шаблона Http-сервиса параметры могут быть переданы либо в пути запроса, либо указаны в запросе после символа ?.

метод ПрочитатьРесурс(Запрос: HttpСервисЗапрос)
// Шаблон = /read/{mode}/{name}/*
// и запрос вида http://host/applications/application-name/api/svc/read/str/txt.txt
// или
// Шаблон = /read/*
// и запрос вида http://host/applications/application-name/api/svc/read?mode=str&name=txt.txt

знч Имя = Запрос.Параметры.ПолучитьПервый("name")
знч Способ = Запрос.Параметры.ПолучитьПервый("mode")

выбор Способ
когда "str"
знч СодержимоеСтрока = ПолучитьСодержимоеРесурса(Имя).ПрочитатьКакСтроку()
Запрос.Ответ.УстановитьТело(СодержимоеСтрока)
когда "bin"
исп СодержимоеПоток = ПолучитьСодержимоеРесурса(Имя)
СодержимоеПоток.КопироватьВ(Запрос.Ответ.ОткрытьПотокЗаписиТела())
иначе
Запрос.Ответ.УстановитьКодСтатуса(400)
Запрос.Ответ.Заголовки.Установить("Content-Type", "text/plain; charset=utf-8")
Запрос.Ответ.УстановитьТело("Неожидаемое значение параметра \"mode\"")
;
;

метод ПолучитьСодержимоеРесурса(Имя: Строка): ПотокЧтения
// ...
;

ПутьКРесурсу

Доступность: Сервер ТолькоЧтение

ПутьКРесурсу: Строка

Путь к ресурсу.

Примеры

В обработчике Http-сервиса перед выполнением логики обработки запроса для отладки регистрируются данные запроса в журнале событий.

метод СРегистрациейЗапроса(Запрос: HttpСервисЗапрос)
знч СобытиеЖурнала = новый ExecutionEvent(Details = "Запрос Http-сервиса. Имя cервиса: \"%{Запрос.ИмяСервиса}\", имя шаблона: \"%{Запрос.ИмяШаблона}\", путь к ресурсу: \"%{Запрос.ПутьКРесурсу}\", метод: %{Запрос.Метод}")
СобытиеЖурнала.Записать()

// логика обработки запроса
;

Тело

Доступность: Сервер ТолькоЧтение

Поток для чтения тела запроса. После установки тела HTTP-ответа, текущий поток чтения тела будет закрыт.

Примеры

В примере в обработчике Http-сервиса получается тело запроса, в нем ожидается json-строка в виде:

{
"name": "txt.txt",
"mode": "bin"
}

Значение свойства "name" используется как имя запрашиваемого ресурса. В зависимости от значения свойства "mode" по-разному формируется тело ответа: либо полностью (если свойство равно "str", то используется метод УстановитьТело, который устанавливает размер тела в заголовке 'Content-Length' ответа), либо частями (если свойство равно "bin", то используется копирование данных в поток записи тела ответа, при этом устанавливается заголовок 'Transfer-Encoding: chunked').

метод ПрочитатьРесурс(Запрос: HttpСервисЗапрос)
знч ТелоЗапроса = Запрос.Тело.ПрочитатьКакСтроку()
знч ЧтениеJson = new ЧтениеJson(ТелоЗапроса)
знч ТелоКакСоответствие = ЧтениеJson.ПрочитатьСодержимоеКакСоответствие()

знч Имя = ТелоКакСоответствие.ПолучитьИлиУмолчание("name", "") как Строка
знч Способ = ТелоКакСоответствие.ПолучитьИлиУмолчание("mode", "") как Строка

выбор Способ
когда "str"
знч СодержимоеСтрока = ПолучитьСодержимоеРесурса(Имя).ПрочитатьКакСтроку()
Запрос.Ответ.УстановитьТело(СодержимоеСтрока)
когда "bin"
исп СодержимоеПоток = ПолучитьСодержимоеРесурса(Имя)
СодержимоеПоток.КопироватьВ(Запрос.Ответ.ОткрытьПотокЗаписиТела())
иначе
Запрос.Ответ.УстановитьКодСтатуса(400)
Запрос.Ответ.Заголовки.Установить("Content-Type", "text/plain; charset=utf-8")
Запрос.Ответ.УстановитьТело("Неожидаемое значение свойства \"mode\"")
;
;

метод ПолучитьСодержимоеРесурса(Имя: Строка): ПотокЧтения
// ...
;

Список унаследованных методов

Объект

ВСтроку, ПолучитьТип, Представление