Разработка и Конфигурация · 11 мин
HTTP-сервисы в 1С: что это и как их использовать
HTTP-сервисы в 1С: назначение, создание в конфигураторе, шаблоны URL, методы GET и POST, публикация на веб-сервере, аутентификация и типичные ошибки.
HTTP-сервисы в 1С — это объекты конфигурации, которые позволяют информационной базе принимать и обрабатывать HTTP-запросы извне: от других программ, мобильных приложений, сайтов, внешних информационных систем. Фактически это способ превратить 1С в веб-сервис REST-архитектуры: внешняя система отправляет запрос по определённому URL, а 1С выполняет код на встроенном языке и возвращает ответ — например, данные в формате JSON или XML.
Механизм появился в платформе 1С:Предприятие 8.3 и стал стандартным инструментом интеграции. До его появления для обмена по HTTP использовались в основном SOAP-ориентированные веб-сервисы, которые тяжелее в настройке и хуже подходят для лёгких интеграций. HTTP-сервисы проще: разработчик сам определяет структуру URL, методы запросов и формат данных.
Типичные сценарии применения: приём заказов с сайта, выгрузка остатков и цен для интернет-магазина, интеграция с CRM, приём уведомлений от платёжных систем и служб доставки, бэкенд для мобильного приложения, обмен данными между двумя базами 1С без COM-соединения.
Как устроен HTTP-сервис в конфигурации
HTTP-сервис добавляется в конфигураторе в ветке «Общие» → «HTTP-сервисы». Каждый сервис имеет корневой URL — базовый адрес, по которому он будет доступен после публикации. Внутри сервиса создаются шаблоны URL, а внутри шаблонов — методы (GET, POST, PUT, DELETE и другие), каждому из которых соответствует обработчик на встроенном языке.
Шаблон URL описывает структуру адреса и может содержать параметры в фигурных скобках. Например, шаблон /products/{id} позволит обрабатывать запросы вида /products/123, где значение 123 попадёт в параметр запроса. Также сервису назначается общий модуль, в котором размещаются функции-обработчики методов.
Обработчик метода — это функция, которая получает объект HTTPСервисЗапрос и должна вернуть объект HTTPСервисОтвет. Из запроса можно прочитать параметры URL, параметры строки запроса (query string), заголовки и тело. В ответ записываются код состояния (200, 400, 404, 500 и т. д.), заголовки и тело — обычно строка JSON.
Создание простого HTTP-сервиса: пошагово
Разберём создание сервиса, который по GET-запросу возвращает остаток товара по его коду. Порядок действий одинаков для большинства типовых конфигураций и собственных разработок.
- 1В конфигураторе откройте ветку «Общие» → «HTTP-сервисы» и добавьте новый сервис, например «СкладAPI». Укажите корневой URL, например warehouse.
- 2Создайте общий модуль (например, СкладAPI) с флагами «Сервер» и «Вызов сервера»; привяжите его к сервису в свойстве «Модуль».
- 3Добавьте шаблон URL /stock/{code} и внутри него метод GET, указав имя обработчика, например ПолучитьОстаток.
- 4В общем модуле напишите функцию ПолучитьОстаток(Запрос), которая читает параметр, выполняет запрос к регистру остатков и возвращает HTTPСервисОтвет с JSON.
- 5Опубликуйте сервис на веб-сервере через меню «Администрирование» → «Публикация на веб-сервере», отметив флаг публикации HTTP-сервисов.
- 6Проверьте работу запросом из браузера или curl: http://server/base/hs/warehouse/stock/000001
Пример минимального обработчика:
Функция ПолучитьОстаток(Запрос)
КодТовара = Запрос.ПараметрыURL["code"];
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// ... запрос к регистру остатков ...
СтруктураОтвета = Новый Структура("code, quantity", КодТовара, Остаток);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, СтруктураОтвета);
Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
Возврат Ответ;
КонецФункции
Обратите внимание на префикс /hs/ в адресе: все HTTP-сервисы публикуются по пути http://сервер/база/hs/корневойURL/.... Это стандартное соглашение платформы, изменить его нельзя.
Публикация на веб-сервере
HTTP-сервис работает только через веб-сервер: Apache или IIS. Файловая база без публикации принимать запросы не может. При публикации платформа создаёт на веб-сервере виртуальный каталог и регистрирует обработчик, который перенаправляет запросы в 1С.
Для публикации откройте в конфигураторе «Администрирование» → «Публикация на веб-сервере», укажите имя публикации и каталог, затем на вкладке «HTTP-сервисы» отметьте «Публиковать HTTP-сервисы по умолчанию» или выберите сервисы вручную. После публикации убедитесь, что веб-сервер запущен и у учётной записи, под которой работает веб-сервер, есть доступ к базе.
Для клиент-серверной базы публикация выполняется аналогично, но веб-сервер должен иметь связь с кластером серверов 1С. Если запрос возвращает ошибку 404 — чаще всего не опубликован сервис или неверно указан корневой URL; ошибка 500 обычно означает исключение в коде обработчика, детали смотрите в технологическом журнале или журнале регистрации.
Аутентификация и безопасность
По умолчанию при публикации можно включить аутентификацию средствами 1С: логин и пароль пользователя информационной базы передаются в заголовке Authorization (Basic-аутентификация). Код обработчика выполняется с правами этого пользователя, поэтому для интеграций заводят отдельную учётную запись с минимально необходимыми ролями.
Для webhook-уведомлений от внешних сервисов (платёжные шлюзы, телефония) логин-пароль не всегда применим: внешняя система может не уметь их передавать. В таких случаях используют секретный токен в URL или заголовке и проверяют его в начале обработчика, а также проверяют подпись запроса, если сервис её предоставляет.
Дополнительные меры: ограничение доступа по IP на уровне веб-сервера, отдельный пул приложений или сайт для публикации, запрет неиспользуемых методов (если нужен только GET, не создавайте POST), отсутствие в ответах внутренних деталей ошибок — при исключении возвращайте код 500 с нейтральным текстом, а не текстом исключения платформы.
Обработка запросов: методы, форматы, нюансы
GET-запросы подходят для чтения данных: остатки, цены, статусы заказов. POST — для создания и изменения: приём заказа, регистрация оплаты. Тело POST обычно передаётся в JSON; в обработчике оно читается методом Запрос.ПолучитьТелоКакСтроку() и разбирается через ПрочитатьJSON.
ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТелоЗапроса);
Данные = ПрочитатьJSON(Чтение, Истина); // Соответствие
Чтение.Закрыть();Важный нюанс — кодировка. Тело запроса читается в кодировке, указанной в заголовке Content-Type; если внешняя система её не передаёт, кириллица может превратиться в «кракозябры». Надёжнее договориться об UTF-8 и явно проверять корректность данных перед записью в базу.
Ещё одно ограничение: обработчик выполняется синхронно, и длительные операции (проведение большого пакета документов, тяжёлые отчёты) могут привести к тайм-ауту веб-сервера. Для тяжёлых задач паттерн такой: сервис принимает запрос, ставит задачу в очередь (регистр сведений или фоновое задание) и сразу возвращает 202 Accepted с идентификатором задачи, а результат забирается отдельным запросом.
Отладка и типичные ошибки
Отладка HTTP-сервисов включается в конфигураторе: «Сервис» → «Параметры» → вкладка отладки, где указывается протокол и сервер отладки; дополнительно в свойствах публикации должен быть разрешён отладочный режим. После этого точки останова в модуле сервиса срабатывают при реальном запросе.
Проверять сервис удобно до подключения реальной внешней системы: браузером для GET-запросов, утилитой curl или Postman для POST с телом. Так вы отделите ошибки самого сервиса от ошибок на стороне клиента.
Как проверить результат
Ответ 200 с ожидаемым JSON
404 — сервис не опубликован или неверный URL
Обработчик работает под учётной записью только с нужными ролями
Используется администратор или полные права
Дубль отклоняется или возвращает тот же результат
Создаются повторные документы
Текст читаем, Content-Type содержит charset=utf-8
Кракозябры, кодировка не указана
HTTP-сервисы против альтернатив
Сравнение вариантов
Гибкий REST-подход, любой формат данных, лёгкая интеграция с сайтами и мобильными приложениями. Требуют ручной реализации аутентификации и валидации.
Строгий контракт через WSDL, автогенерация клиентов. Подходят для корпоративных систем с формальными интерфейсами, но тяжелее в разработке и отладке.
Включается одной галкой публикации, даёт CRUD-доступ к объектам без кода. Минус: доступ к данным напрямую, сложно встроить бизнес-логику.
Асинхронный обмен по расписанию без веб-сервера. Подходит для пакетной синхронизации, но не для запросов в реальном времени.
Выбор зависит от задачи: для лёгкой интеграции с сайтом или мобильным приложением HTTP-сервис почти всегда удобнее; для обмена между двумя базами 1С по расписанию проще план обмена; OData хорош для быстрого доступа к данным внутри доверенного контура, но не для публичного API.
Что важно запомнить
HTTP-сервис — это объект конфигурации с шаблонами URL и обработчиками методов, работающий только через публикацию на веб-сервере по адресу /hs/. Ключевые правила: отдельный пользователь с минимальными правами, HTTPS для внешнего доступа, явный Content-Type с UTF-8, защита от дублей и обработка исключений.
Частые вопросы
Можно ли использовать HTTP-сервис без веб-сервера?
Нет. Приём HTTP-запросов возможен только через публикацию на Apache или IIS — веб-сервер принимает соединение и передаёт запрос платформе. Альтернатива без веб-сервера — исходящие соединения из 1С (HTTPСоединение) или обмен через промежуточный брокер, куда 1С сама забирает задачи.
Чем HTTP-сервис отличается от веб-сервиса в 1С?
Веб-сервис работает по протоколу SOAP с описанием WSDL и строгой структурой сообщений XML. HTTP-сервис — свободный REST-подход: разработчик сам задаёт URL, методы, формат тела и коды ответов. Для интеграций с сайтами и мобильными приложениями обычно выбирают HTTP-сервисы как более простые и лёгкие.
Почему запрос возвращает 404, хотя сервис создан?
Чаще всего сервис не опубликован на веб-сервере или публикация устарела после изменения конфигурации. Проверьте полный адрес: он должен включать /hs/ и корневой URL сервиса без опечаток. Также убедитесь, что шаблон URL соответствует фактическому пути запроса, включая количество сегментов.
Как передать файл через HTTP-сервис?
Файл передаётся в теле POST-запроса. В обработчике тело читается методом ПолучитьТелоКакДвоичныеДанные() и сохраняется во временный файл или напрямую в хранилище значения. Для больших файлов учитывайте ограничения веб-сервера на размер тела запроса и время выполнения.
Безопасно ли передавать токен в URL?
Токен в строке запроса виден в журналах веб-сервера, прокси и истории браузера, поэтому это слабый вариант. Надёжнее передавать секрет в заголовке Authorization или собственном заголовке и обязательно по HTTPS. Если внешний сервис умеет подписывать запросы (HMAC-подпись), используйте проверку подписи.
Можно ли вызывать HTTP-сервис из другой базы 1С?
Да, это распространённый сценарий. Вызывающая база использует объект HTTPСоединение и HTTPЗапрос, формирует JSON и читает ответ. Такой обмен не требует COM-соединения и работает между базами на разных серверах и разных версиях платформы.