Начнем с конца: что в итоге должно получиться…
Создание HTTP-сервиса.
Предположим, что нам нужен HTTP-сервис, который по запросу вернет список пользователей.
Выглядеть он должен следующим образом: http://localhost/base/hs/info?action=getusers
Возвращать должен строку JSON (массив объектов JSON со свойствами: имя пользователя, id пользователя):
[
{ "name": "Администратор", "id": "563e7509-83bb-11e5-80c3-00505601174a" },
{ "name": "Гость", "id": "423a9d3d-88fc-11e5-80c3-00505601174a" }
]
Чтобы это реализовать, создадим в конфигурации (или в расширении) объект HTTP-сервис. Как он будет называться – неважно, для простоты назовем его «Инфо». Корневой URL должен быть равен «info».
Далее добавим к нему шаблон URL, для простоты назовем его «Основной». Значение шаблона должно быть равно «/*».
К шаблону мы добавим метод GET: имя = «GET», HTTP-метод = «GET».
Создадим обработчик HTTP-метода GET.
По умолчанию процедура обработчика метода заполнена кодом, возвращающим стандартный успешный HTTP ответ (код 200).
Функция ОсновнойGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции
Скорректируем его так, чтобы он возвращал нам список пользователей.
Функция ОсновнойGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Если НРЕГ(Запрос.ПараметрыЗапроса.Получить("action")) = "getusers" Тогда
Ответ.УстановитьТелоИзСтроки(ВернутьСписокПользователей());
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ВернутьСписокПользователей()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Недействителен = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();
ОтветМассив = Новый Массив;
Пока Выборка.Следующий() Цикл
ОтветМассив.Добавить(Новый Структура("name,id",Выборка.Ссылка.Наименование,""+Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;
Ответ = Новый ЗаписьJSON;
Ответ.УстановитьСтроку();
ЗаписатьJSON(Ответ,ОтветМассив); // сериализует ОтветМассив в формат JSON
Возврат Ответ.Закрыть();
КонецФункции
Проверяем результат:
Отладка HTTP-сервиса.
Настройка подключения отладчика.
Для отладки HTTP-сервиса нужно включить (или убедиться в том, что включено) следующие флажки.
- Разрешить отладку HTTP-сервисов в меню публикации 1С:Предприятие (Конфигуратор / Администрирование / Публикация на веб сервере…).
Адрес отладчика – адрес компьютера, где мы будем запускать конфигуратор (обратите внимание на синтаксис: «tcp://<адрес отладчика>»). - Включить автоматическое подключение к HTTP-сервисам на сервере (Конфигуратор / Отладка / Подключение…).
Проверим, как это все работает.
Поставим точку останова в начале функции метода GET:
Обновляем страничку с вызовом нашего сервиса.
Убеждаемся, что наш отладчик успешно подключился к сеансу HTTP-сервиса:
Заключение.
В этой статье рассмотрен простейший пример для быстрого создания HTTP-сервиса с целью освоения механизмов работы с ним.
В заключении хотелось бы упомянуть про возможность создания HTTP-сервисов с параметрами URL, например:
Эта возможность настраивается в ШаблонеURL HTTP-сервиса.
Для вышеуказанного примера шаблон мог бы выглядеть так: «/users/{idПользователя}/*» или так «/{Раздел}/{id}/*».
В функции обработчика метода этого шаблона параметры URL можно получить через свойство Запрос.ПараметрыURL, например так:
Запрос.ПараметрыURL[«idПользователя»]
Обратите внимание на последовательность обработки шаблонов HTTP-сервиса.
В нашем примере использованы 2 шаблона:
- /*
- /users/{idПользователя}/*
При вызове метода http://10.211.55.3/base/hs/info/users/0b3dcecf-104e-11e6-9bdd-001c42ecfab6?action=disable сработает шаблон 1, т.к. параметры URL ему также соответствуют, а обрабатывается он первым. Чтобы этого не происходило, первый шаблон рекомендуется изменить на «/i/*» для однозначного соответствия URL шаблону.
Вызывать первый метод соответственно также придется с новым URL:
Значительная часть статьи украденаотсюда
Интересно почему нет никаких указаний что это не оригинал, а сперто. Даже если это коллеги делятся — как-то не принято выдавать за свой труд чужие статьи.
(1) ZOMI,
чуть было не плюсанул ))
(2) Makushimo, я тоже)
(1) ZOMI, Прочитал — статьи разные. Список источников конечно указывать хорошо, но это на усмотрении модераторов — плюсанул…
(4) awk, конечно, разные. Но речь о том что большая часть из другой статьи. И видимо чужой. Так что плюсанули вы плагиатору.
(5) ZOMI, с учетом того, что скопипастена только часть «Заключение», а сама статья весьма уникальна, Ваше мнение несколько странно смотрится.
(6) starik-2005,
нет, смотрите внимательнее.
Обычный плагиат.
да, ну?
(1) ZOMI,
это оригинал… можете не сомневаться. Надеюсь, что автор статьи по ссылке это подтвердит. Так что плюсуйте, не стесняйтесь.
Так получилось, что он разместил ее там, слегка разбив на разделы. А я разместил ее здесь (как есть).
(7) ZOMI, здесь Вы противоречите своему первому посту, где сказали, что значительная часть статьи на кодерлайне, и якобы автор ее скопипастил оттуда, а на то, что с кодерлайна только заключение, Вы сцылку на 1С-ный сайт даете…
А с другой стороны, чем больше о веб-сервисах напишут, тем лучше жить, а то меня убивают люди, которые увидев код создания объявления и прокси, начинают грызть ногти и выдавать реплики о том, что первый раз такое видят.
(8)
Да, это необходимо для таких скептиков как я.
(9) starik-2005,
ссылку на статью с ИТС я даю к замечанию об «уникальности» статьи. По мне так итс-ная статья более годная.
(7) ZOMI, Не у всех и не везде есть доступ к ИТС, поэтому даже тупой копипаст бывает полезен.
Согласен с мнением, что высок уровень копирования другой статьи. Поэтому тоже считаю, что стоит указать на нее ссылку.
(9) На кодерлайне 3 статьи, которые склеены здесь в одну. В сумме скопировано на вскидку около 80%.
(13) если б она была первоисточником, то указал бы… А поскольку первоисточником является именно эта статья, правда опубликованная несколько позже той, то указывать не буду. Да по факту, это одна и та же статья, только в разных форматах — там она разбита на несколько частей, может чуть порезана. Мне кажется, что там она не удобна для чтения и переваривания. Тут лучше. Имхо.
(all) а по существу нет никаких замечаний, пожеланий, дополнений?
Ув. Автор, прошу Вас поделиться опытом:
Я начал использовать http-сервисами недавно, и напоролся на такую проблему: Если в 1с завести пользователя — то мне ответ на любой Get или post запрос приходит Ошибка 401 (не авторизован). Как быть?
Был бы Вам очень благодарен, если Вы подскажете, как решить сию проблему )
авторизация в смысле запросом логина-пароли — программно, т.е. я не ручками ввожу логин-пароль, а как мне авторизоваться программно.
(15) serko8547, нужно передать авторизацию.
xhr.setRequestHeader(‘Authorization’,»Basic » + btoa(escape(‘Администратор’) + «:» + ‘password’));
(17) unpete, прав.