Итак, чтобы получить список сотрудников с возможным отбором из справочника Сотрудники, добавим у нашего HTTP-сервиса объект Шаблон URL Список с шаблоном /*. Затем у этого объекта добавим подчиненный объект Метод GET, в качестве HTTP-метода оставим предложенное по умолчанию значение GET. Далее, нажав на кнопку открытия в поле Обработчик, создадим обработчик этого метода (см. рис. 1.13). Имя обработчика автоматически формируется путем соединения имени шаблона URL и имени самого метода. Это имя можно изменить в дальнейшем по своему желанию, хотя делать это не рекомендуется.
В модуле нашего HTTP-сервиса будет создан шаблон функции-обработчика СписокGET(), которая получает на вход параметр типа HTTPСервисЗапрос и должна вернуть объект типа HTTPСервисОтвет. Заполним эту функцию следующим образом (листинг 1.56).
Листинг 1.56. Функция «СписокGET»
Функция СписокGET(Запрос)
// Сформировать ответ, возвращаемый HTTP-сервисом.
Ответ = Новый HTTPСервисОтвет(200);
// Получить из запроса параметр URL *.
Признак = Запрос.ПараметрыURL["*"];
// Сформировать выборку сотрудников.
Если Признак = "" Тогда
// Без отбора.
Выборка = Справочники.Сотрудники.Выбрать();
Иначе
// С отбором по признаку работы.
Работает = ?(ВРег(Прав(Признак,2)) = "ДА", Истина, Ложь);
Выборка = Справочники.Сотрудники.Выбрать(,, Новый Структура("Работает", Работает));
КонецЕсли;
// В цикле обхода выборки записать в JSON список сотрудников.
// Создать объект записи и записать строковое значение в строку JSON.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
// Записать начало корневого объекта.
Запись.ЗаписатьНачалоОбъекта();
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьИмяСвойства(Выборка.Наименование);
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Код");
Запись.ЗаписатьЗначение(Выборка.Код);
Запись.ЗаписатьИмяСвойства("Должность");
Запись.ЗаписатьЗначение(Строка(Выборка.Должность));
Запись.ЗаписатьКонецОбъекта();
КонецЦикла;
// Записать конец корневого объекта.
Запись.ЗаписатьКонецОбъекта();
// Записать результат записи в строку JSON.
Результат = Запись.Закрыть();
// Установить тело ответа из строки Результат.
Ответ.УстановитьТелоИзСтроки(Результат);
Ответ.Заголовки.Вставить("Content-type", "application/json");
Возврат Ответ;
КонецФункции
Прокомментируем код функции.
В переменной Ответ мы сразу же создаем объект типа HTTPСервисОтвет, который содержит ответ, формируемый HTTP-сервером на поступивший запрос. Ответ имеет стандартный код возврата HTTP (КодСостояния=200). Код состояния 200 сообщает об успешном выполнении запроса. Поскольку в функции мы описываем простейшее действие – получение выборки данных из справочника, то для простоты мы не будем здесь анализировать ошибочные состояния, которые могут возникнуть при выполнении этого обработчика.
Подробнее
Подробнее о кодах состояния, возвращаемых HTTP-сервером, рассказывается в разделе «».
Родительский объект функции-обработчика – это шаблон URL Список, который содержит строку шаблона /*. Этот шаблон означает, что в относительном URL на месте звездочки могут оказаться любые допустимые символы, в том числе возможно и отсутствие этих символов.
Поэтому мы получаем и анализируем те символы, которые в реальном URL присутствуют на месте звездочки. Для этого мы получаем параметры URL запроса, который передается в функцию в параметре Запрос с помощью конструкции Запрос.ПараметрыURL["*"].
Если относительный URL пустой, то мы формируем выборку из справочника Сотрудники без отбора. Если на месте звездочки находится строка «ДА», то она интерпретируется как Истина, любые другие символы интерпретируется как Ложь. Соответственно этому признаку накладывается отбор на поле справочника Работает.
В цикле обхода выборки мы заполняем строку JSON списком сотрудников и затем записываем эту строку в переменную Результат. После этого с помощью метода УстановитьТелоИзСтроки() устанавливаем тело ответа HTTP-сервиса из строки Результат и возвращаем ответ сервиса в переменной Ответ.
При этом заголовок «Content-type» объекта HTTPСервисОтвет мы устанавливаем как «application/json». Такой заголовок помогает клиенту понять, что же за данные к нему пришли, кроме того, из него определяется кодировка ответа, если она не задана явно.
Теперь посмотрим, как это работает.
Прежде всего нам нужно опубликовать наш HTTP-сервис на веб-сервере. Для этого в диалоге публикации информационной базы на веб-сервере на закладке HTTP сервисы установим флажок Публиковать HTTP сервисы по умолчанию и отметим имеющиеся HTTP-сервисы, к которым мы хотим предоставить доступ из внешних систем (рис. 1.14).
Рис. 1.14. Публикация HTTP-сервиса на веб-сервере
И все, больше делать ничего не надо.
Поскольку в большинстве наших примеров мы будем просто получать данные информационной базы методом GET, то URL запроса к HTTP-сервису будем набирать непосредственно в адресной строке браузера и сразу же в окне браузера будем видеть содержимое ответа сервиса.
Заметим, что в этом разделе таким способом (получение данных через браузер) мы будем пользоваться только для упрощения примеров. На самом же деле к подобным HTTP-сервисам обращаются с помощью HTTP-запросов. Про то, как в «1С:Предприятии» написать собственный HTTP-запрос и с его помощью обратиться к HTTP-сервису, будет рассказано в следующем разделе «».
Итак, наберем в адресной строке браузера следующий URL (листинг 1.57).
Листинг 1.57. URL запроса
http://localhost/REST/hs/employees
Как видите, для получения списка сотрудников из справочника мы указываем только базовую часть URL запроса к HTTP-сервису, относительная часть URL отсутствует. Поэтому такой URL будет сопоставлен с шаблоном URL Список (строка шаблона – /*) и будет вызван обработчик этого шаблона СписокGET(). В результате в окне браузера мы увидим список всех сотрудников из справочника Сотрудники (листинг 1.58).
Листинг 1.58. Содержимое ответа сервиса
{
"Алексеев Сергей Иванович": {
"Код": "000000001",
"Должность": "Администратор"
},
"Артемов Игорь Владимирович": {
"Код": "REST-0003",
"Должность": "Новая должность - REST"
},
"Смирнова Светлана Ивановна": {
"Код": "000000002",
"Должность": "Кассир"
}
}
Теперь наберем в адресной строке браузера следующий URL (листинг 1.59).
Листинг 1.59. URL запроса
http://localhost/REST/hs/employees/да
Такой URL будет сопоставлен с шаблоном URL Список (строка шаблона – /*) и будет вызван обработчик этого шаблона СписокGET(). В результате в окне браузера мы увидим список только работающих сотрудников (листинг 1.60).
Листинг 1.60. Содержимое ответа сервиса
{
"Алексеев Сергей Иванович": {
"Код": "000000001",
"Должность": "Администратор"
},
"Артемов Игорь Владимирович": {
"Код": "REST-0003",
"Должность": "Новая должность - REST"
}
}
Теперь наберем в адресной строке браузера следующий URL (листинг 1.61).
Листинг 1.61. URL запроса
http://localhost/REST/hs/employees/нет
В результате в окне браузера мы увидим список только неработающих сотрудников (листинг 1.62).
Листинг 1.62. Содержимое ответа сервиса
{
"Смирнова Светлана Ивановна": {
"Код": "000000002",
"Должность": "Кассир"
}
}