К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сделать HTTP-сервис в 1С

Как создать HTTP-сервис в 1С: добавление объекта в конфигураторе, шаблоны URL, обработчики методов, публикация на веб-сервере и примеры кода.

HTTP-сервис в 1С — это объект конфигурации, который позволяет информационной базе принимать входящие HTTP-запросы от внешних систем и возвращать ответы. С его помощью реализуют интеграции с сайтами, мобильными приложениями, платёжными шлюзами, кассами и любыми другими системами, умеющими работать по протоколу HTTP.

В отличие от веб-сервисов (SOAP), HTTP-сервисы не привязаны к жёсткому контракту WSDL: вы сами определяете формат URL, параметры и структуру ответа — чаще всего JSON. Это делает их основным инструментом для построения REST-подобных API на платформе 1С.

Механизм HTTP-сервисов доступен в платформе 1С:Предприятие начиная с версии 8.3.5. Для работы сервиса требуется публикация информационной базы на веб-сервере (IIS или Apache). В файловом режиме без веб-сервера HTTP-сервис работать не будет.

Когда нужен HTTP-сервис и чем он отличается от веб-сервиса

HTTP-сервис подходит, когда внешняя система должна обращаться к 1С по произвольному URL и получать данные в свободном формате — обычно JSON. Типичные сценарии: приём заказов с сайта, выгрузка остатков и цен для маркетплейса, приём уведомлений о платежах (webhook), API для мобильного приложения.

Веб-сервис (SOAP) оправдан, когда контрагент требует строгий контракт WSDL — например, старые банковские и государственные интеграции. Для новых разработок почти всегда выбирают HTTP-сервисы из-за простоты отладки и меньшего объёма передаваемых данных.

HTTP-сервис или веб-сервис

HTTP-сервис

Свободный формат URL и ответа (JSON/XML), легко отлаживать, подходит для REST API и интеграций с сайтами. Нет автоматического контракта — формат нужно документировать вручную.

Веб-сервис (SOAP)

Строгий контракт WSDL, автогенерация клиентских прокси. Подходит для интеграций, где внешняя сторона требует SOAP. Более громоздкий и сложный в отладке.

Создание HTTP-сервиса в конфигураторе

Откройте конфигурацию в конфигураторе и в дереве объектов найдите ветку «Общие» → «HTTP-сервисы». Добавьте новый объект, например с именем ShopAPI. В свойствах сервиса задайте «Корневой URL» — это префикс, по которому сервис будет доступен, например shop. Полный адрес сервиса будет выглядеть так: http://сервер/ИмяБазы/hs/shop/....

Обратите внимание: сегмент hs в URL — стандартный маркер HTTP-сервисов платформы (для веб-сервисов используется ws). Его менять нельзя.

Далее создайте «Шаблон URL» — например, /products/{id} или /orders/. Шаблон определяет, какие адреса внутри корневого URL будет обрабатывать сервис. В фигурных скобках указываются именованные параметры, значения которых затем доступны в коде обработчика. Символ означает «любой хвост пути».

Написание обработчиков методов

Для каждого шаблона URL создаются «Методы» — GET, POST, PUT, DELETE и другие. Для каждого метода платформа генерирует обработчик — функцию вида ИмяШаблонаИмяМетода(Запрос), которая должна вернуть объект HTTPСервисОтвет.

Пример обработчика GET, возвращающего данные товара в JSON:

Функция ТоварыПолучить(Запрос)

ИдТовара = Запрос.ПараметрыURL["id"];

Ответ = Новый HTTPСервисОтвет(200);

Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");

Товар = Справочники.Номенклатура.ПолучитьСсылку(

Новый УникальныйИдентификатор(ИдТовара));

Если Не ЗначениеЗаполнено(Товар) Тогда

Ответ.КодСостояния = 404;

Возврат Ответ;

КонецЕсли;

Данные = Новый Структура;

Данные.Вставить("name", Строка(Товар));

Запись = Новый ЗаписьJSON;

Запись.УстановитьСтроку();

ЗаписатьJSON(Запись, Данные);

Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());

Возврат Ответ;

КонецФункции

Для POST-запросов тело читается через Запрос.ПолучитьТелоКакСтроку() и разбирается через ПрочитатьJSON. Всегда возвращайте осмысленные коды состояния: 200 при успехе, 400 при ошибке в параметрах, 404 когда объект не найден, 500 при внутренней ошибке. Это сильно упрощает диагностику на стороне внешней системы.

bsl
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;

Публикация HTTP-сервиса на веб-сервере

Без публикации сервис недоступен извне. В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации, каталог и обязательно установите флажок «Публиковать HTTP-сервисы» (на вкладке «HTTP-сервисы» можно отметить конкретные сервисы). Для клиент-серверной базы публикация выполняется на сервере, где развёрнут IIS или Apache с установленными модулями расширения веб-сервера 1С.

После публикации платформа создаёт в каталоге публикации файл default.vrd, в котором регистрируются точки входа hs. Если сервис не отвечает, первым делом проверьте, что в этом файле присутствует секция вашего HTTP-сервиса и что веб-сервер перезапущен после изменения публикации.

Порядок действий
  1. 1
    Создайте объект «HTTP-сервис» в конфигураторе и задайте корневой URL
  2. 2
    Добавьте шаблоны URL с параметрами в фигурных скобках
  3. 3
    Напишите обработчики методов GET/POST с возвратом HTTPСервисОтвет
  4. 4
    Опубликуйте базу на веб-сервере с флажком «Публиковать HTTP-сервисы»
  5. 5
    Проверьте сервис запросом из браузера или Postman по адресу /hs/корневойURL/...
  6. 6
    Проверьте коды ответов и корректность JSON в теле ответа

Аутентификация и безопасность

По умолчанию HTTP-сервис работает под пользователем, указанным в настройках публикации, либо требует Basic-аутентификацию пользователя 1С — это зависит от настроек в файле публикации. Оставлять сервис полностью анонимным с доступом к данным недопустимо: любой, кто узнает URL, сможет читать или изменять данные базы.

Рекомендуемые меры: публикация только по HTTPS, отдельный пользователь 1С с минимально необходимыми правами (только на чтение нужных справочников, без прав на документы и администрирование), проверка токена или подписи в заголовках запроса внутри обработчика. Для webhook от платёжных систем обязательно проверяйте подпись запроса, если система её предоставляет.

Отладка и типичные ошибки

Отладка HTTP-сервисов включается в конфигураторе: «Сервис» → «Параметры» → на вкладке отладки выберите протокол и включите автоматическое подключение предметов отладки «HTTP-сервисы». После этого точки останова в обработчиках срабатывают при входящих запросах.

Если сервис возвращает ошибку 404, проверьте: точное совпадение URL (регистр и слеши имеют значение), наличие сервиса в default.vrd, перезапуск веб-сервера после публикации. Ошибка 500 обычно означает исключение в коде обработчика — смотрите журнал регистрации, туда платформа пишет события ошибок HTTP-сервисов.

Типичные ошибки
01
Забытый флажок «Публиковать HTTP-сервисы» — сервис отвечает 404, хотя код написан верно
02
Отсутствие Content-Type с charset=utf-8 — кириллица в JSON у клиента превращается в кракозябры
03
Возврат кода 200 при любых ошибках — внешняя система не может отличить сбой от успеха
04
Права пользователя публикации «как у администратора» — компрометация URL даёт полный доступ к базе
05
Не перезапущен веб-сервер после изменения публикации — изменения в default.vrd не применяются

Проверка результата и FAQ

После публикации проверьте сервис простым GET-запросом из браузера: http://сервер/База/hs/shop/products/.... Для POST-запросов используйте Postman или curl. Успешный результат — корректный код состояния, заголовок Content-Type и валидный JSON в теле ответа. Проверьте также поведение при несуществующем объекте (должен вернуться 404) и при неавторизованном запросе (401).

Контрольные точки

Как проверить результат

Запрос к сервису из браузера или Postman
Норма

Код 200 и корректный JSON в ответе

Тревожный признак

404 (проверьте публикацию и URL) или 500 (смотрите журнал регистрации)

Кодировка ответа
Норма

Кириллица отображается корректно

Тревожный признак

Кракозябры — не указан charset=utf-8 в Content-Type

Запрос без авторизации
Норма

Возвращается 401

Тревожный признак

Данные доступны анонимно — срочно настройте аутентификацию

Можно ли использовать HTTP-сервис в файловой базе без веб-сервера?

Нет. HTTP-сервис обрабатывается расширением веб-сервера, поэтому требуется публикация на IIS или Apache. Файловая база при этом может быть опубликована через веб-сервер на том же компьютере — клиент-серверный режим не обязателен.

Чем HTTP-сервис отличается от OData, который 1С публикует автоматически?

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

Как передать параметры в HTTP-сервис?

Тремя способами: в пути URL через шаблон (/products/{id}, доступны в Запрос.ПараметрыURL), в строке запроса (?date=..., доступны в Запрос.ПараметрыЗапроса) и в теле запроса для POST/PUT — читается через ПолучитьТелоКакСтроку() и разбирается как JSON.

Почему обработчик не вызывается, хотя сервис опубликован?

Чаще всего не совпадает шаблон URL с фактическим адресом (лишний или недостающий слеш, другой регистр), не создан метод для нужного HTTP-глагола (например, запрос идёт POST, а описан только GET), либо веб-сервер не перезапущен после изменения публикации.

Как ограничить нагрузку на базу от частых запросов?

Используйте отдельный пул соединений в настройках публикации, кешируйте редко меняющиеся данные, избегайте тяжёлых запросов в обработчиках и настройте ограничения на стороне веб-сервера (таймауты, лимиты запросов с одного адреса).

Можно ли вернуть из HTTP-сервиса файл, а не JSON?

Да. Метод Ответ.УстановитьТелоИзДвоичныхДанных() позволяет вернуть любое содержимое — PDF, изображение, архив. Укажите соответствующий Content-Type, например application/pdf, и при необходимости заголовок Content-Disposition с именем файла.

Итог

Что важно запомнить

HTTP-сервис создаётся в конфигураторе (объект + шаблоны URL + обработчики методов), требует публикации на веб-сервере с включённой опцией публикации HTTP-сервисов и обязательной настройки аутентификации с минимальными правами. Проверяйте результат кодами состояния, корректной кодировкой и поведением при ошибках.