HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие
















Статья о том, как можно быстро создать HTTP-сервис в 1С:Предприятие и как выполнять его отладку.

Начнем с конца: что в итоге должно получиться…

Создание 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».

HTTP-service creation

Далее добавим к нему шаблон URL, для простоты назовем его «Основной». Значение шаблона должно быть равно «/*».

Шаблоны URL

К шаблону мы добавим метод GET: имя = «GET», HTTP-метод = «GET».

Method adding

Примечание. Имя метода рекомендуется назначать по имени HTTP-метода.

Создадим обработчик HTTP-метода GET.

Handle setting

По умолчанию процедура обработчика метода заполнена кодом, возвращающим стандартный успешный HTTP ответ (код 200).

Функция ОсновнойGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции

Скорректируем его так, чтобы он возвращал нам список пользователей.

Функция ОсновнойGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Если НРЕГ(Запрос.ПараметрыЗапроса.Получить("action")) = "getusers" Тогда
Ответ.УстановитьТелоИзСтроки(ВернутьСписокПользователей());
КонецЕсли;
Возврат Ответ;
КонецФункции

Функция ВернутьСписокПользователей()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Недействителен = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();
ОтветМассив = Новый Массив;
Пока Выборка.Следующий() Цикл
ОтветМассив.Добавить(Новый Структура("name,id",Выборка.Ссылка.Наименование,""+Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;

Ответ = Новый ЗаписьJSON;
Ответ.УстановитьСтроку();
ЗаписатьJSON(Ответ,ОтветМассив); // сериализует ОтветМассив в формат JSON
Возврат Ответ.Закрыть();
КонецФункции

Проверяем результат:

Result

Отладка HTTP-сервиса.

Настройка подключения отладчика.

Для отладки HTTP-сервиса нужно включить (или убедиться в том, что включено) следующие флажки.

  1. Разрешить отладку HTTP-сервисов в меню публикации 1С:Предприятие (Конфигуратор / Администрирование / Публикация на веб сервере…).
    Включение отладки
    Адрес отладчика – адрес компьютера, где мы будем запускать конфигуратор (обратите внимание на синтаксис: «tcp://<адрес отладчика>»).
  2. Включить автоматическое подключение к HTTP-сервисам на сервере (Конфигуратор / Отладка / Подключение…).
    Set up autoconnection
    Set up autoconnection 2

Проверим, как это все работает.

Поставим точку останова в начале функции метода GET:

Breakpoint

Обновляем страничку с вызовом нашего сервиса.

Site open

Убеждаемся, что наш отладчик успешно подключился к сеансу HTTP-сервиса:

Check breakpoint catch

Check value of variables

Заключение.

В этой статье рассмотрен простейший пример для быстрого создания HTTP-сервиса с целью освоения механизмов работы с ним.

В заключении хотелось бы упомянуть про возможность создания HTTP-сервисов с параметрами URL, например:

Parts of link description 

Эта возможность настраивается в ШаблонеURL HTTP-сервиса.

Для вышеуказанного примера шаблон мог бы выглядеть так: «/users/{idПользователя}/*» или так «/{Раздел}/{id}/*».

Another template example

В функции обработчика метода этого шаблона параметры URL можно получить через свойство Запрос.ПараметрыURL, например так:

Запрос.ПараметрыURL[«idПользователя»]

Example for template params

Обратите внимание на последовательность обработки шаблонов HTTP­-сервиса.

В нашем примере использованы 2 шаблона:

  1. /*
  2. /users/{idПользователя}/*

При вызове метода http://10.211.55.3/base/hs/info/users/0b3dcecf-104e-11e6-9bdd-001c42ecfab6?action=disable сработает шаблон 1, т.к. параметры URL ему также соответствуют, а обрабатывается он первым. Чтобы этого не происходило, первый шаблон рекомендуется изменить на «/i/*» для однозначного соответствия URL шаблону.

Вызывать первый метод соответственно также придется с новым URL:

Check new template 

17 Comments

  1. ZOMI

    Значительная часть статьи украдена отсюда

    Интересно почему нет никаких указаний что это не оригинал, а сперто. Даже если это коллеги делятся — как-то не принято выдавать за свой труд чужие статьи.

    Reply
  2. Makushimo

    (1) ZOMI,

    чуть было не плюсанул ))

    Reply
  3. baracuda

    (2) Makushimo, я тоже)

    Reply
  4. awk

    (1) ZOMI, Прочитал — статьи разные. Список источников конечно указывать хорошо, но это на усмотрении модераторов — плюсанул…

    Reply
  5. ZOMI

    (4) awk, конечно, разные. Но речь о том что большая часть из другой статьи. И видимо чужой. Так что плюсанули вы плагиатору.

    Reply
  6. starik-2005

    (5) ZOMI, с учетом того, что скопипастена только часть «Заключение», а сама статья весьма уникальна, Ваше мнение несколько странно смотрится.

    Reply
  7. ZOMI

    (6) starik-2005,

    скопипастена только часть

    нет, смотрите внимательнее.

    Обычный плагиат.

    а сама статья весьма уникальна

    да, ну?

    http://its.1c.ru/db/metod8dev/content/5756/hdoc

    Reply
  8. serg_infostart

    (1) ZOMI,

    это оригинал… можете не сомневаться. Надеюсь, что автор статьи по ссылке это подтвердит. Так что плюсуйте, не стесняйтесь.

    Так получилось, что он разместил ее там, слегка разбив на разделы. А я разместил ее здесь (как есть).

    Reply
  9. starik-2005

    (7) ZOMI, здесь Вы противоречите своему первому посту, где сказали, что значительная часть статьи на кодерлайне, и якобы автор ее скопипастил оттуда, а на то, что с кодерлайна только заключение, Вы сцылку на 1С-ный сайт даете…

    А с другой стороны, чем больше о веб-сервисах напишут, тем лучше жить, а то меня убивают люди, которые увидев код создания объявления и прокси, начинают грызть ногти и выдавать реплики о том, что первый раз такое видят.

    Reply
  10. ZOMI

    (8)

    Надеюсь, что автор статьи по ссылке это подтвердит.

    Да, это необходимо для таких скептиков как я.

    (9) starik-2005,

    ссылку на статью с ИТС я даю к замечанию об «уникальности» статьи. По мне так итс-ная статья более годная.

    Reply
  11. Zhilyakovdr

    (7) ZOMI, Не у всех и не везде есть доступ к ИТС, поэтому даже тупой копипаст бывает полезен.

    Reply
  12. tormozit

    Согласен с мнением, что высок уровень копирования другой статьи. Поэтому тоже считаю, что стоит указать на нее ссылку.

    Reply
  13. tormozit

    (9) На кодерлайне 3 статьи, которые склеены здесь в одну. В сумме скопировано на вскидку около 80%.

    Reply
  14. serg_infostart

    (13) если б она была первоисточником, то указал бы… А поскольку первоисточником является именно эта статья, правда опубликованная несколько позже той, то указывать не буду. Да по факту, это одна и та же статья, только в разных форматах — там она разбита на несколько частей, может чуть порезана. Мне кажется, что там она не удобна для чтения и переваривания. Тут лучше. Имхо.

    (all) а по существу нет никаких замечаний, пожеланий, дополнений?

    Reply
  15. serko8547

    Ув. Автор, прошу Вас поделиться опытом:

    Я начал использовать http-сервисами недавно, и напоролся на такую проблему: Если в 1с завести пользователя — то мне ответ на любой Get или post запрос приходит Ошибка 401 (не авторизован). Как быть?

    Был бы Вам очень благодарен, если Вы подскажете, как решить сию проблему )

    авторизация в смысле запросом логина-пароли — программно, т.е. я не ручками ввожу логин-пароль, а как мне авторизоваться программно.

    Reply
  16. serg_infostart

    (15) serko8547, нужно передать авторизацию.

    xhr.setRequestHeader(‘Authorization’,»Basic » + btoa(escape(‘Администратор’) + «:» + ‘password’));

    Reply
  17. serg_infostart

    (17) unpete, прав.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *