HTTP-сервис в 1С: создание, публикация и отладка
В платформе версии 8.3.5 появилась возможность создавать HTTP-сервисы. Как и «старые» SOAP web-сервисы, HTTP-сервис позволяет получать/изменять данные, но при этом, как утверждает компания 1С, HTTP-сервисы потенциально позволяют упростить создание клиентских приложений, уменьшить объем передаваемых данных и вычислительную нагрузку, все это особенно для мобильных устройств.
В этой статья я постараюсь рассказать о том, как создавать, отлаживать и использовать HTTP-сервисы в 1С.
Начнем с того, что для создания HTTP-сервиса нам необходим веб-сервер, например Apache 2.2 (начиная с версии 8.3.8 и Apache 2.4 подойдет). Описывать установку веб-сервера думаю нет необходимости.
Создание HTTP-сервиса
Итак, создаем новый HTTP-сервис:
Корневой URL — важный параметр, входит в адрес по которому сервис будет доступен после публикации.
В соответствующем разделе создаем новый шаблон URL и метод:
У шаблона URL есть единственное свойство — шаблон. Этим свойством можно задать путь по которому будет происходить обращение к HTTP-сервису. В шаблоне можно использовать параметризованные сегменты, как на рисунке ниже (об их использовании ниже).
У метода есть свойство HTTP-метод, которое можно указать выбрав одно из следующих значений: GET, POST, PUT, DELETE, PATCH, MERGE, CONNECT, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK или Любой.
При обращении к HTTP-сервису, платформа пытается сопоставить адрес, по которому произошло обращение с одним из имеющихся шаблонов и методов. Если сопоставить удалось, то будет выполнен обработчик метода, если же сопоставить не удалось, то будет возвращен код ответа 404.
Перейдем к примеру обработчика метода, в нем я возвращаю содержимое переменной «Запрос», которая передается в обработчик:
Публикация и проверка HTTP-сервиса
Наш HTTP-сервис готов к публикации, в этом нет ничего сложного (вероятно потребуется запустить конфигуратор от имени администратора):
После публикации я могу обратиться к сервису вот по такому адресу: http://localhost/HTTPTest/hs/Obmen/test-parametr/Test/GetInfo?param=value, где:
Параметры URL, параметры запроса и заголовки представлены в виде фиксированных структур.
Вероятнее всего, при обращение к HTTP-сервису нужно будет авторизоваться (если в базе есть хоть один пользователь), есть несколько способов решения этой проблемы.
Первый — изменить файл default.vrd, который находится в каталоге публикации. В этом файле нужно дополнить строку подключения к базе, например, было:
ib=»File=»C:\Base\TEST»;»,
ib=»File=»C:\Base\TEST»;Usr=Логин;Pwd=Пароль».
В этом случае любые обращения к HTTP-сервису не будут требовать логина и пароля.
Во-вторых, можно указывать логин и пароль при подключении к HTTP-сервису:
Пример создания HTTP-сервисов на платформе «1С:Предприятие»
В этой статье разбираются демонстрационные HTTP-сервисы, созданные в демонстрационной конфигурации «Управляемое приложение» для платформы «1С:Предприятие» версии 8.3.5 и старше.
Цель статьи – помочь разобраться с использованием технологии HTTP-сервисов и показать практическое применение некоторых неочевидных механизмов.
Демонстрационная база «Управляемое приложение» представляет собой простую конфигурацию, в которой создано большинство объектов, которые могут понадобиться при автоматизации деятельности небольшой торговой фирмы. В частности, в ней присутствует справочник «Товары». Элементами этого справочника мы будем управлять при помощи HTTP-сервиса. Такой сценарий может возникнуть, например, при интеграции с интернет-магазином или другой корпоративной ИС, в которую заносится первичная информация о товарах.
Для удобства изучения описываемых HTTP-сервисов рекомендуется включить авторизацию ОС при публикации на веб-сервере и настроить пользователю с ролью «Администратор» использование windows-аутентификации от имени пользователя ОС, под которым будет проходить изучение.
HTTP-сервис «Товары»
HTTP-сервис «Товары» написан в REST-стиле. Он позволяет получать и удалять элементы и группы в справочнике товаров. Доступ к элементу осуществляется с помощью его пути в иерархии.
Например, для того чтобы получить информацию о товаре «Ряженка» с кодом 000000027, входящем в группу «Молочные» с кодом 000000099, которая входит, в свою очередь в группу «Продукты» с кодом 000000011, в браузере надо будет набрать http:// /hs/Products/000000011/000000099/000000027. Если база опубликована по пути http://localhost:8090/Platform8Demo/, то путь будет:
http://localhost:8090/Platform8Demo/ hs /Products/000000011/000000099/000000027.
Из чего состоит путь? Рассмотрим по частям:
В нашем случае у сервиса один дочерний объект шаблон URL. В свойстве «Шаблон» этого объекта записана строка “/*». Звездочка – это специальное значение, указывающее на то, что к данному шаблону подходят любые URL. В нашем случае необходимость использования такого шаблона (т.е. по сути отказа от ограничения URL) обусловлена произвольной глубиной иерархии товаров.
У нашего шаблона URL имеются два дочерних объекта, соответствующих HTTP-методам GET (получение) и DELETE (удаление). Именно в них указаны обработчики, которые будут вызываться при обращении к HTTP-сервису.
Для обработки запроса с использованием HTTP-метода GET (а именно такой будет создан, если вставить указанные выше URL в браузер) используется функция ПутьКТоваруGET. Рассмотрим эту функцию немного подробнее:
Сформированное XML-представление используется в ответе сервиса:
HTTP-сервис «ОписанияТоваров»
HTTP-сервис «ОписанияТоваров» предназначен для получения и редактирования информации о товарах. Он написан в RPC (Remote Procedure Call) стиле, похожем на SOAP. В качестве дополнительного условия также предположим, что заказчик, для которого мы разрабатываем конфигурацию, потребовал предусмотреть наличие нескольких версий API где-то в будущем.
Обращение к сервису выполняется при помощи запросов с использование метода POST к URL следующего вида:
Рассмотрим, из чего состоит путь:
Видно, что сервер передал описание товара в формате html.
Рассмотрим, как реализован сервис. Объект метаданных HTTP-сервиса имеет единственный дочерний шаблон URL, в котором прописан следующий шаблон:
Т.к. у нас пока нет разных версий сервиса, сегмент с номером версии фиксирован, а вот второй сегмент может принимать разные значения, соответствующие именам методов. В коде получение имени метода выглядит следующим образом:
Обращаем внимание, что коллекция «ПараметрыURL» запроса содержит единственное значение – согласно количеству сегментов, которые могут принимать разные значение.
Для возврата описания товара мы устанавливаем тело запроса:
Аналогично, для установки описания товара мы получаем его из запроса:
При установке описания из тела запроса мы проводим минимальную проверку корректности того, что прислал нам клиент, в данном случае – только типа содержимого, изучая заголовок «Content-type».
Для того чтобы протестировать установку тела запроса достаточно заполнить его в Fiddler:
Отладка кода HTTP-сервиса
Отладка кода HTTP-сервиса аналогична отладке код SOAP веб-сервиса. Для включения отладки нужно:
Разрешение отладки на веб-сервере
Для разрешения отладки на веб-сервере нужно перейти на вкладку «Прочие» диалога публикации на веб-сервере, установить флаг «разрешить отладку» и указать адрес отладчика. Для локальной отладки можно указать tcp://localhost
То же самое можно сделать вручную, исправив vrd-файл, см документацию.
Включение автоматического подключения
Для того чтобы платформа автоматически подключалась для отладки к вызываемым HTTP-сервисам нужно:
Помните, что флажок следует устанавливать при каждом запуске конфигуратора, в котором требуется отладка HTTP-сервисов.
Заключение
В статье рассмотрены основные аспекты программирования HTTP-сервисов в «1С:Предприятии», в частности:
Также показано, как можно их тестировать при помощи программы Fiddler. Более полные справочные материалы можно найти в ИТС по постоянному адресу.
Пример HTTP-сервиса в 1С 8.3
Создание HTTP-сервиса
Разработаем простой HTTP-сервис в 1С.
В ветке метаданных Общие — HTTP-сервисы создадим новый HTTP-сервис. Укажем имя HTTP-сервис1, корневой URL httpservice:
Перейдем на закладку Шаблоны URL и добавим новый шаблон URL:
Укажем имя Hello, шаблон /hello:
Для шаблона URL добавим новый метод:
HTTP-метод оставим GET и укажем такое же имя:
В поле Обработчик нажмем на кнопку с лупой и попадем в модуль HTTP-сервиса, где автоматически будет добавлена процедура HelloGET:
Добавим еще пару строк кода:
На этом все. Сохраняем конфигурацию базы данных.
Установка веб-сервера
Теперь нужно установить веб-сервер.
Веб-сервер — это программа, запущенная в фоновом режиме, которая может принимать и обрабатывать запросы по HTTP протоколу.
1С поддерживает два веб-сервера:
Apache
Apache является бесплатным кроссплатформенным веб-сервером. Для его установки переходим по ссылке и в верхней части скачиваем Apache нужной разрядности. Разрядность определяется по разрядности платформы 1С. Я скачаю 32-х разрядную:
Распакуем скачанный архив и скопируем папку Apache24 на диск C, так как по умолчанию в конфигурационном файле прописан именно такой путь.
Теперь перейдем в каталог C:\Apache24\bin и запустим httpd.exe. Веб-сервер будет запущен, окно с запущенным веб-сервером должно остаться открытым:
По умолчанию веб-сервер запускается на 80 порту. Для проверки введем в адресной строке браузера localhost. Если веб-сервер был запущен, то должно выйти сообщение «It works!»:
Если 80 порт уже занят, то есть возможность изменить его. Для этого нужно открыть файл C:\Apache24\conf\httpd.conf любым текстовым редактором, найти в нем строку Listen 80 и изменить 80 на нужный порт, например 8080:
Так как теперь используется не стандартный порт, то для проверки в браузере нужно ввести localhost:8080.
Если нужно перенести каталог с Apache в другое место, например на диск G, то нужно в файле Apache24\conf\httpd.conf изменить путь к переменной SRVROOT:
Если каталог с Apache был скопирован в Program Files, то нужно дать права на каталог с Apache для роли Пользователи:
Теперь нужно установить Apache как службу. Для этого закроем окно с веб-сервером и запустим командную строку от имени администратора. В командной строке введем cd C:\Apache24\bin, чтобы перейти в каталог с apache:
Для запуска службы в каталоге C:\Apache24\bin запустим ApacheMonitor.exe. В трее появится значок для управления службой Apache:
Щелкнем по нему левой кнопкой мыши и выберем команду Start:
IIS (Internet Information Services)
IIS — это проприетарный веб-сервер от Microsoft. Работает только под Windows.
Для установки нужно в панели управления выбрать Программы и компоненты — Включение или отключение компонентов Windows:
В открывшемся окне в группе Службы IIS нужно отметить следующие компоненты:
И дождаться окончания их установки.
Для запуска нужно в панели управления выбрать пункт Администрирование — Диспетчер служб IIS:
В открывшемся окне в правой части нажать на кнопку Запустить:
По умолчанию IIS запускается на 80 порту. Для проверки нужно в браузере в адресной строки ввести localhost, должна загрузиться страница с IIS:
Чтобы изменить порт нужно в диспетчере IIS в левой части в разделе Сайты выделить Default Web Site:
И в правой части нажать на кнопку Привязки:
В открывшемся окне нужно выделить строку с типом http и нажать на кнопку Изменить:
В поле Порт указать нужный порт, например 8080 и нажать ОК:
Чтобы 64-х разрядный IIS мог работать с 32-х разрядной платформой 1С нужно в диспетчере IIS в левой части выделить пункт Пулы приложений, в списке пулов выделить DefaultAppPool и нажать на кнопку Дополнительные параметры:
В открывшемся окне нужно для свойства Разрешены 32-разрядные приложения установить True и нажать ОК:
Модули расширения веб-сервера
Теперь нужно установить модули расширения веб-сервера 1С (если они еще не установлены). Для этого в Windows перейдем в Приложения и возможности, найдем нужную версию платформы 1С и нажмем Изменить:
В открывшемся окне выберем Изменить и нажмем Далее:
Здесь нужно отметить пункт Модули расширения веб-сервера и продолжить установку:
Публикация HTTP-сервиса
Я буду выполнять публикацию на веб-сервере Apache, для IIS процесс ничем не отличается.
Перед публикацией создадим в каталоге C:\Apache24\htdocs папку testbase. В эту папку будет опубликован HTTP-сервис.
Для IIS не нужно вручную создавать каталог, при публикации он будет создан автоматически.
Для публикации HTTP-сервиса нужно запустить 1С от имени администратора и зайти в конфигуратор. В верхнем меню выбираем Администрирование — Публикация на веб-сервере:
В открывшемся окне нужно ввести произвольное имя (на латинице), выбрать веб-сервер Apache 2.4, в свойстве каталог выбрать созданную нами папку C:\Apache24\htdocs\testbase\. Затем нужно снять все флажки, в том числе на закладке Web-сервисы:
А на закладке HTTP сервисы оставить флажок только для созданного нами HTTP-сервиса:
Нажимаем Опубликовать:
1С предложит перезапустить веб-сервер, откажемся и сделаем это вручную через ApacheMonitor командой Restart:
Тестирование HTTP-сервиса
Для обращения к HTTP-сервису нужно ввести в строке браузера строку по следующему шаблону:
Адрес http сервиса 1с
Создаем php файл с текстом:
// Заполняем параметры CURL для получения данных по запросу GET
curl_setopt($ch, CURLOPT_URL, ‘http://localhost/test/hs/ob/OblistAll’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Выполнение запроса и получение ответа
$output = curl_exec($ch);
// Проверка наличия ошибок
if ($output === FALSE) <
>
//Выводим сервисную информацию по выполнению запроса
$info = curl_getinfo($ch);
6. Авторизация на PHP для доступа к HTTP-сервису
Последнее что в этой статье хочу затронуть, это авторизация HTTP-клиента на HTTP-сервисе.
В конфигурации добавляем роль Администратор, даем ему полные права. Создаем нового пользователя Администратор с ролью Администратор и паролем 1.
Теперь страницы написанные на PHP просто так обратиться к HTTP-сервису не смогут. Нужно выполнить авторизацию. Для этого наш код нужно дописать. Ниже представлен полный код PHP файла с возможностью авторизации на HTTP-сервисе 1С:
P/S Было интересно разобраться в HTTP-сервисах 1С. В следующей статье поговорим о передачи параметров и методе POST.
HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие
Начнем с конца: что в итоге должно получиться.
Создание HTTP-сервиса.
Предположим, что нам нужен HTTP-сервис, который по запросу вернет список пользователей.
Возвращать должен строку JSON (массив объектов JSON со свойствами: имя пользователя, id пользователя):
Чтобы это реализовать, создадим в конфигурации (или в расширении) объект HTTP-сервис. Как он будет называться – неважно, для простоты назовем его «Инфо». Корневой URL должен быть равен «info».
Далее добавим к нему шаблон URL, для простоты назовем его «Основной». Значение шаблона должно быть равно «/*».
К шаблону мы добавим метод GET: имя = «GET», HTTP-метод = «GET».
Создадим обработчик HTTP-метода GET.
По умолчанию процедура обработчика метода заполнена кодом, возвращающим стандартный успешный HTTP ответ (код 200).
Скорректируем его так, чтобы он возвращал нам список пользователей.
Отладка HTTP-сервиса.
Настройка подключения отладчика.
Для отладки HTTP-сервиса нужно включить (или убедиться в том, что включено) следующие флажки.
Проверим, как это все работает.
Поставим точку останова в начале функции метода GET:
Обновляем страничку с вызовом нашего сервиса.
Убеждаемся, что наш отладчик успешно подключился к сеансу HTTP-сервиса:
Заключение.
В этой статье рассмотрен простейший пример для быстрого создания HTTP-сервиса с целью освоения механизмов работы с ним.
В заключении хотелось бы упомянуть про возможность создания HTTP-сервисов с параметрами URL, например:
Эта возможность настраивается в ШаблонеURL HTTP-сервиса.
Для вышеуказанного примера шаблон мог бы выглядеть так: «/users/
В функции обработчика метода этого шаблона параметры URL можно получить через свойство Запрос.ПараметрыURL, например так:
Обратите внимание на последовательность обработки шаблонов HTTP-сервиса.
В нашем примере использованы 2 шаблона:
При вызове метода http://10.211.55.3/base/hs/info/users/0b3dcecf-104e-11e6-9bdd-001c42ecfab6?action=disable сработает шаблон 1, т.к. параметры URL ему также соответствуют, а обрабатывается он первым. Чтобы этого не происходило, первый шаблон рекомендуется изменить на «/i/*» для однозначного соответствия URL шаблону.
Вызывать первый метод соответственно также придется с новым URL:

























































