Разработка и Конфигурация · 9 мин
Как опубликовать HTTP-сервис 1С из расширения
Пошаговая инструкция по публикации HTTP-сервиса 1С, созданного в расширении конфигурации: настройка default.vrd, веб-сервера IIS и Apache, права, проверка и типичные ошибки.
Расширения конфигурации в 1С позволяют добавлять собственные HTTP-сервисы, не изменяя типовую конфигурацию. Это удобно для интеграций: приема вебхуков, обмена с сайтом, мобильными приложениями и внешними системами. Однако публикация такого сервиса имеет особенности: файл публикации default.vrd должен содержать корректную ссылку на расширение, иначе сервис будет недоступен или будет выдавать ошибку.
Главное отличие от публикации HTTP-сервиса основной конфигурации — параметр, указывающий имя расширения в описании сервиса внутри default.vrd. Диалог публикации в конфигураторе не всегда корректно обрабатывает сервисы из расширений, поэтому часто файл приходится править вручную. Ниже разобран полный цикл: создание сервиса в расширении, настройка веб-сервера, публикация, проверка и типичные ошибки.
Создание HTTP-сервиса в расширении
Сначала создайте расширение конфигурации или откройте существующее. В дереве метаданных расширения добавьте объект «HTTP-сервис». Задайте имя, например ExchangeAPI, и свойство «Корневой URL» — это префикс пути, по которому сервис будет доступен, например api.
Внутри сервиса создайте шаблон URL, например /order/{id}, и метод (GET, POST и т.д.). Для метода напишите обработчик в модуле сервиса. Обработчик должен возвращать объект HTTPСервисОтвет с кодом состояния и телом ответа.
Функция OrderПолучить(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("{\"status\":\"ok\"}");
Ответ.Заголовки.Вставить("Content-Type", "application/json");
Возврат Ответ;
КонецФункцииУбедитесь, что расширение подключено к базе и активно: в режиме «Все функции → Администрирование → Расширения конфигурации» у расширения должны стоять флажки «Используется», а признак «Безопасный режим» должен соответствовать вашим требованиям к правам. Если расширение отключено, сервис физически не будет работать, даже при правильной публикации.
Подготовка веб-сервера
HTTP-сервисы 1С работают через веб-сервер: Apache или IIS (на Windows), Apache (на Linux). Веб-сервер должен быть установлен и настроен модуль сопряжения с платформой 1С — он устанавливается вместе с компонентами платформы (при установке выберите «Модули расширения веб-сервера»).
Для IIS убедитесь, что установлены компоненты CGI/ISAPI и что приложение будет работать под пулом с нужной разрядностью — разрядность пула должна совпадать с разрядностью платформы 1С. Для Apache проверьте, что версия Apache поддерживается вашей версией платформы: платформа поставляет модули сопряжения под конкретные ветки Apache (например, 2.2 и 2.4 — это разные модули).
Публикация через конфигуратор и ручная правка default.vrd
Стандартный путь: в конфигураторе откройте «Администрирование → Публикация на веб-сервере». Укажите имя публикации, каталог, веб-сервер и на вкладке «HTTP-сервисы» отметьте нужный сервис. Однако диалог публикации работает с сервисами основной конфигурации; сервисы из расширений в списке могут отсутствовать или публиковаться некорректно в зависимости от версии платформы.
Надежный способ — отредактировать файл default.vrd вручную. Он находится в каталоге публикации. Внутри элемента <point> для HTTP-сервисов добавьте элемент <service> с указанием имени сервиса и имени расширения.
<point name="ExchangeAPI"
alias="hs"
enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5">
<service name="ExchangeAPI" extension="MyExtension"/>
</point>Ключевой атрибут — extension в элементе <service>: значение должно точно совпадать с именем расширения конфигурации (свойство «Имя», а не синоним). Также проверьте, что в корневом элементе <point> файла указаны правильные параметры подключения к информационной базе (ib): для серверной базы — строка вида Srvr=...;Ref=...;, для файловой — путь к каталогу базы.
Права доступа и аутентификация
Запросы к HTTP-сервису выполняются от имени пользователя информационной базы. В default.vrd можно задать пользователя по умолчанию (атрибуты usr и pwd в элементе <point> основной публикации) — тогда все запросы выполняются под этой учетной записью. Альтернатива — базовая аутентификация: веб-сервер передает логин и пароль, и 1С аутентифицирует пользователя ИБ.
Пользователю, под которым работает сервис, нужны права на объекты, к которым обращается обработчик: документы, справочники, регистры. Права на сам HTTP-сервис из расширения настраиваются в ролях расширения или в профилях групп доступа, если используется БСП. Проверьте также, не блокирует ли безопасный режим расширения нужные операции — при необходимости снимите флажок «Безопасный режим» или «Защита от опасных действий» с пониманием рисков.
Проверка работоспособности
После публикации и перезапуска веб-сервера откройте URL сервиса в браузере или через curl. Формат адреса: http://сервер/имя_публикации/hs/корневой_url/шаблон. Например: http://server/trade/hs/api/order/123.
Как проверить результат
Ответ с ожидаемым кодом (200) и телом из обработчика
404 — сервис не найден, 500 — ошибка в коде или подключении
Запросы фиксируются, ошибок нет
Ошибки компиляции модуля сервиса или отказа в доступе
Совпадает с именем расширения в конфигураторе
Опечатка или расширение отключено в базе
Если получаете 404, проверьте последовательно: активно ли расширение, совпадает ли имя в атрибуте extension, правильно ли указан корневой URL сервиса и шаблон, перезапускали ли веб-сервер. Ошибка 500 обычно означает исключение в обработчике — смотрите журнал регистрации и включите отладку HTTP-сервисов в конфигураторе («Отладка → Подключение», включить автоматическое подключение к HTTP-сервисам).
Типичные ошибки и ограничения
Учитывайте ограничение: HTTP-сервисы из расширения работают только пока расширение подключено и совместимо с текущей версией конфигурации. После обновления конфигурации расширение может отключиться как несовместимое — сервис молча перестанет отвечать. Включите такую проверку в регламент после обновлений.
Еще одно ограничение — производительность: каждый запрос проходит через сеанс 1С. Для высоконагруженных API настройте пул сеансов в default.vrd (poolSize, poolTimeout) и следите за временем выполнения обработчиков, избегая тяжелых запросов без индексов.
FAQ
Можно ли опубликовать несколько HTTP-сервисов из разных расширений в одной публикации?
Да. В default.vrd для каждого сервиса добавляется отдельный элемент service со своим именем и атрибутом extension. Все они будут доступны по общему префиксу /hs/ с разными корневыми URL.
Работает ли HTTP-сервис из расширения, если расширение в безопасном режиме?
Работает, но в безопасном режиме запрещены операции с файловой системой сервера, COM-объекты, внешние компоненты и привилегированный режим в чистом виде. Если обработчику это нужно, отключите безопасный режим для расширения, оценив риски.
Почему после обновления конфигурации сервис перестал отвечать?
Скорее всего, расширение отключилось из-за несовместимости с новой версией конфигурации. Откройте список расширений, устраните несовместимость (проверьте заимствованные объекты и контрольные точки) и снова включите расширение.
Как отлаживать обработчик HTTP-сервиса из расширения?
В конфигураторе включите отладку по HTTP или TCP, в настройках отладки (Сервис → Параметры → Отладка) отметьте автоматическое подключение к HTTP-сервисам, установите точку останова в модуле сервиса расширения и выполните запрос — сеанс отладки подключится автоматически.
Можно ли изменить префикс /hs/ в адресе сервиса?
Да, атрибут alias элемента point в default.vrd задает этот префикс. Укажите, например, alias="api", и сервис будет доступен по пути /имя_публикации/api/корневой_url. Не забудьте перезапустить веб-сервер.
Нужна ли отдельная публикация для расширения, если база уже опубликована?
Нет, отдельная публикация не требуется. Достаточно добавить элемент service с атрибутом extension в существующий default.vrd текущей публикации и перезапустить веб-сервер.
Что важно запомнить
HTTP-сервис из расширения публикуется через default.vrd с обязательным атрибутом extension, равным имени расширения. Расширение должно быть активно, веб-сервер — перезапущен после правок, а пользователь — иметь нужные права. Проверяйте результат запросом к URL и журналом регистрации.