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

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

Что такое HTTP-сервис в 1С и как его настроить

Что такое HTTP-сервис в 1С, как создать и опубликовать его на веб-сервере, написать обработчики методов, настроить аутентификацию и проверить работу.

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

Механизм появился как более гибкая альтернатива классическим web-сервисам на SOAP. Вместо жестких XML-конвертов разработчик сам определяет формат запроса и ответа — чаще всего это JSON, но можно работать с любыми данными: текстом, файлами, двоичным содержимым. Это делает HTTP-сервисы стандартным инструментом интеграции 1С с интернет-магазинами, CRM, банковскими системами и мобильными клиентами.

Работает схема так: в конфигураторе создается объект «HTTP-сервис», в нем описываются шаблоны URL и методы (GET, POST, PUT, DELETE и другие), для каждого метода пишется обработчик на встроенном языке. Затем база публикуется на веб-сервере (IIS или Apache), и входящие запросы по указанным адресам попадают в эти обработчики.

Чем HTTP-сервис отличается от web-сервиса (SOAP)

В 1С исторически существует два механизма приема внешних запросов: web-сервисы и HTTP-сервисы. Web-сервис работает по протоколу SOAP: строгое описание интерфейса через WSDL, обмен XML-пакетами фиксированной структуры, автоматическая генерация клиентского кода. Это удобно для интеграции «система — система», когда обе стороны поддерживают SOAP, но избыточно для легковесных клиентов.

HTTP-сервис не навязывает формат. Разработчик сам решает, что принимать и возвращать: JSON, XML, обычный текст, файл. Он же контролирует коды ответа, заголовки и обработку ошибок. Обратная сторона — вся ответственность за валидацию входных данных, корректность формата и безопасность ложится на автора обработчиков.

Сравнение вариантов

HTTP-сервис

Подходит для REST-подобных API, обмена JSON, интеграции с сайтами и мобильными приложениями. Требует ручной обработки форматов и ошибок.

Web-сервис (SOAP)

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

План обмена / файловый обмен

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

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

Создание начинается в дереве конфигурации: ветка «Общие» → «HTTP-сервисы» → «Добавить». У нового объекта задается имя и ключевое свойство — корневой URL. Все адреса сервиса будут начинаться с него, например при корневом URL «api» сервис будет доступен по пути вида /base/hs/api/....

Далее внутри сервиса создаются шаблоны URL — это маски адресов, например /goods/{id} или /orders/*. Параметры в фигурных скобках передаются в обработчик как именованные значения, звездочка означает произвольное окончание пути. Для каждого шаблона добавляются методы (GET, POST и т.д.), а для метода указывается процедура-обработчик в модуле сервиса.

Порядок создания HTTP-сервиса
  1. 1
    В конфигураторе откройте Общие → HTTP-сервисы и добавьте новый объект
  2. 2
    Укажите корневой URL, например api
  3. 3
    Добавьте шаблон URL, например /goods/{id}
  4. 4
    Добавьте метод GET и задайте имя обработчика
  5. 5
    Напишите код обработчика в модуле HTTP-сервиса
  6. 6
    Обновите конфигурацию базы данных
  7. 7
    Опубликуйте базу на веб-сервере с включенной публикацией HTTP-сервисов

Как написать обработчик метода

Обработчик — это функция в модуле HTTP-сервиса, которая принимает объект ЗапросHTTP (или HTTPСервисЗапрос) и должна вернуть объект HTTPСервисОтвет. Из запроса доступны параметры URL, параметры строки запроса, заголовки и тело. Ответ формируется вручную: указывается код состояния, тело и при необходимости заголовки.

Типичный обработчик чтения данных выглядит так: извлечь параметр из URL, найти объект в базе, сериализовать его в JSON через ЗаписьJSON, вернуть ответ с кодом 200. Если объект не найден — вернуть код 404 с понятным описанием ошибки. Оборачивать логику в попытку/исключение обязательно: необработанное исключение вернет клиенту код 500 без внятного пояснения.

bsl
Функция ПолучитьТовар(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    КодТовара = Запрос.ПараметрыURL["id"];
    Ссылка = Справочники.Номенклатура.НайтиПоКоду(КодТовара);
    Если Ссылка.Пустая() Тогда
        Ответ.КодСостояния = 404;
        Ответ.УстановитьТелоИзСтроки("{\"error\": \"Товар не найден\"}");
        Возврат Ответ;
    КонецЕсли;
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Новый Структура("Наименование", Ссылка.Наименование));
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    Возврат Ответ;
КонецФункции

Для методов POST и PUT тело запроса читается через Запрос.ПолучитьТелоКакСтроку() или ПолучитьТелоКакПоток(), после чего разбирается через ПрочитатьJSON. Перед записью данных в базу входные значения нужно проверять: обязательность полей, типы, существование связанных ссылок.

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

HTTP-сервис работает только через веб-сервер: файловая база без публикации принимать запросы не может. Поддерживаются Apache и IIS. Публикация выполняется из конфигуратора: «Администрирование» → «Публикация на веб-сервере», где в дополнительных настройках нужно отметить публикацию HTTP-сервисов. На веб-сервере должен быть установлен модуль расширения веб-сервера 1С.

После публикации адрес сервиса строится по схеме: http://сервер/имя_публикации/hs/корневой_url/путь_шаблона. Сегмент «hs» — служебный признак обращения именно к HTTP-сервисам (для web-сервисов используется «ws»). Проверить доступность можно простым GET-запросом из браузера или утилиты curl.

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

По умолчанию входящий запрос выполняется под пользователем, указанным в настройках публикации, либо требует стандартной аутентификации 1С (basic-аутентификация с логином и паролем пользователя информационной базы). Для внешних систем принято создавать отдельного технического пользователя с минимально необходимыми правами — только на те объекты, к которым обращаются обработчики.

Дополнительно в самом обработчике можно реализовать проверку токена: клиент передает ключ в заголовке, а код сверяет его со значением, хранящимся в константе или регистре. Это не заменяет базовую аутентификацию, но позволяет гибко отзывать доступ и различать клиентов. Обмен с внешними системами следует вести по HTTPS — иначе логины, токены и данные передаются открытым текстом.

Типичные ошибки
01
Технический пользователь с полными правами — компрометация одного токена открывает всю базу
02
Отсутствие попытки/исключения в обработчике — клиент получает 500 без описания, диагностика усложняется
03
Чтение тела запроса без проверки размера и формата — сбой на первом же «кривом» запросе
04
Тестирование на рабочей базе вместо копии — ошибка в обработчике портит реальные учетные данные
05
Открытый доступ по HTTP без шифрования — перехват учетных данных в сети

Проверка работы и диагностика проблем

Базовая проверка — отправить GET-запрос браузером или curl и убедиться, что приходит ожидаемый ответ с правильным кодом. Если возвращается 404, чаще всего не совпадает корневой URL или шаблон, либо сервис не опубликован. Ошибка 500 указывает на исключение в обработчике — причина ищется в журнале регистрации. Отказ в доступе (401/403) означает проблему с аутентификацией или правами пользователя.

Для отладки удобно временно добавить в обработчик запись входящих параметров в журнал регистрации через ЗаписьЖурналаРегистрации — это показывает, что реально пришло от клиента. После отладки избыточное логирование убирают: на нагруженном сервисе оно замедляет работу и раздувает журнал.

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

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

Ответ на тестовый GET-запрос
Норма

Код 200 и тело в ожидаемом формате

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

404 — проверить URL и публикацию; 500 — исключение в обработчике

Запись данных через POST
Норма

Объект появился в базе, ответ содержит идентификатор

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

Код 200, но данных в базе нет — логика записи не отработала

Запрос без учетных данных
Норма

Отказ в доступе (401/403)

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

Сервис отвечает данными — аутентификация не настроена

Типичные сценарии применения

Интеграция с сайтом и интернет-магазином

Самый распространенный сценарий: сайт запрашивает остатки и цены, а в обратную сторону передает оформленные заказы. HTTP-сервис принимает заказ в JSON, обработчик создает документ «Заказ покупателя» и возвращает его номер. Такой обмен работает в реальном времени и не требует промежуточных файлов.

Мобильные приложения и внешние клиенты

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

Часто задаваемые вопросы

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

Нет. Прием HTTP-запросов возможен только при публикации базы на веб-сервере (Apache или IIS) с установленным модулем расширения 1С. Файловая база, открытая напрямую, внешние запросы не принимает.

Что выбрать: HTTP-сервис или web-сервис SOAP?

Если внешняя система требует SOAP и WSDL — web-сервис. Для обмена JSON с сайтами, мобильными приложениями и современными системами удобнее HTTP-сервис: он проще в отладке и не требует от клиента поддержки SOAP.

Как передать файл через HTTP-сервис?

Клиент отправляет файл в теле POST-запроса, а обработчик читает его через ПолучитьТелоКакПоток() и сохраняет во временный файл или сразу обрабатывает. Для отдачи файла ответ формируется через УстановитьТелоИзДвоичныхДанных с указанием нужного Content-Type.

Почему сервис возвращает ошибку 500?

Код 500 означает необработанное исключение в обработчике. Точную причину показывает журнал регистрации (отбор по событию с именем HTTP-сервиса). Чтобы клиент получал осмысленный ответ, оборачивайте логику в Попытка/Исключение и возвращайте описание ошибки в теле ответа.

Нужна ли отдельная лицензия 1С для HTTP-сервисов?

Отдельной лицензии на сам механизм не требуется — он входит в платформу. Однако сеансы, открываемые входящими запросами, расходуют клиентские лицензии по общим правилам, что стоит учитывать при большом числе одновременных обращений.

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

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

Итог

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

HTTP-сервис — объект конфигурации для приема HTTP-запросов: создается в конфигураторе с шаблонами URL и обработчиками методов, работает только через публикацию на веб-сервере. Обязательны проверка входных данных, обработка исключений, аутентификация с минимальными правами и HTTPS для внешнего доступа.