Разработка и Конфигурация · 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-сервис или веб-сервис
Свободный формат URL и ответа (JSON/XML), легко отлаживать, подходит для REST API и интеграций с сайтами. Нет автоматического контракта — формат нужно документировать вручную.
Строгий контракт 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 при внутренней ошибке. Это сильно упрощает диагностику на стороне внешней системы.
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;Публикация HTTP-сервиса на веб-сервере
Без публикации сервис недоступен извне. В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации, каталог и обязательно установите флажок «Публиковать HTTP-сервисы» (на вкладке «HTTP-сервисы» можно отметить конкретные сервисы). Для клиент-серверной базы публикация выполняется на сервере, где развёрнут IIS или Apache с установленными модулями расширения веб-сервера 1С.
После публикации платформа создаёт в каталоге публикации файл default.vrd, в котором регистрируются точки входа hs. Если сервис не отвечает, первым делом проверьте, что в этом файле присутствует секция вашего HTTP-сервиса и что веб-сервер перезапущен после изменения публикации.
- 1Создайте объект «HTTP-сервис» в конфигураторе и задайте корневой URL
- 2Добавьте шаблоны URL с параметрами в фигурных скобках
- 3Напишите обработчики методов GET/POST с возвратом HTTPСервисОтвет
- 4Опубликуйте базу на веб-сервере с флажком «Публиковать HTTP-сервисы»
- 5Проверьте сервис запросом из браузера или Postman по адресу /hs/корневойURL/...
- 6Проверьте коды ответов и корректность JSON в теле ответа
Аутентификация и безопасность
По умолчанию HTTP-сервис работает под пользователем, указанным в настройках публикации, либо требует Basic-аутентификацию пользователя 1С — это зависит от настроек в файле публикации. Оставлять сервис полностью анонимным с доступом к данным недопустимо: любой, кто узнает URL, сможет читать или изменять данные базы.
Рекомендуемые меры: публикация только по HTTPS, отдельный пользователь 1С с минимально необходимыми правами (только на чтение нужных справочников, без прав на документы и администрирование), проверка токена или подписи в заголовках запроса внутри обработчика. Для webhook от платёжных систем обязательно проверяйте подпись запроса, если система её предоставляет.
Отладка и типичные ошибки
Отладка HTTP-сервисов включается в конфигураторе: «Сервис» → «Параметры» → на вкладке отладки выберите протокол и включите автоматическое подключение предметов отладки «HTTP-сервисы». После этого точки останова в обработчиках срабатывают при входящих запросах.
Если сервис возвращает ошибку 404, проверьте: точное совпадение URL (регистр и слеши имеют значение), наличие сервиса в default.vrd, перезапуск веб-сервера после публикации. Ошибка 500 обычно означает исключение в коде обработчика — смотрите журнал регистрации, туда платформа пишет события ошибок HTTP-сервисов.
Проверка результата и FAQ
После публикации проверьте сервис простым GET-запросом из браузера: http://сервер/База/hs/shop/products/.... Для POST-запросов используйте Postman или curl. Успешный результат — корректный код состояния, заголовок Content-Type и валидный JSON в теле ответа. Проверьте также поведение при несуществующем объекте (должен вернуться 404) и при неавторизованном запросе (401).
Как проверить результат
Код 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-сервисов и обязательной настройки аутентификации с минимальными правами. Проверяйте результат кодами состояния, корректной кодировкой и поведением при ошибках.