Как создать и настроить HTTP-сервис в 1С 8.3: подробное руководство

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современной экосистеме автоматизации бизнеса интеграция систем играет ключевую роль. Одним из наиболее эффективных и быстрых способов организовать взаимодействие между 1С и внешними приложениями (сайтами, мобильными приложениями, другими базами данных) является использование HTTP-сервисов. В рамках данной статьи мы подробно разберем, как создать собственный REST API на стороне 1С, настроить шаблоны URL и реализовать обработку запросов.

Понятие и архитектура HTTP-сервисов в 1С

Для начала проанализируем, что представляет собой этот объект. В отличие от тяжеловесных Web-сервисов (SOAP), HTTP-сервисы работают по протоколу HTTP напрямую, используя стандартные методы: GET, POST, PUT, DELETE. Это делает их легковесными и совместимыми практически с любым современным языком программирования. Рассмотрим структуру объекта в дереве конфигурации:

  1. Корневой узел HTTP-сервиса: здесь задается имя сервиса и его корневой URL.
  2. Шаблоны URL: определяют структуру пути, по которому будет обращаться клиент.
  3. Методы: конкретные функции, привязанные к HTTP-глаголам, которые выполняют программный код.

Шаг 1. Создание объекта и настройка шаблона URL

Разберем процесс создания на конкретном примере. Предположим, нам нужно создать сервис для получения остатков товаров. Перейдем в раздел Общие — HTTP-сервисы и добавим новый объект с именем СкладскиеОстатки. В поле "Корневой URL" укажем stock.

Теперь добавим Шаблон URL. Назовем его ПолучитьОстаток. В поле "Шаблон" введем следующую конструкцию: /get/{Articul}. Здесь параметр в фигурных скобках {Articul} является динамическим — вместо него клиент будет подставлять конкретный артикул товара. Проанализируем ситуацию: такая структура позволяет нам гибко извлекать данные из строки запроса без необходимости парсить весь URL вручную.

Шаг 2. Реализация метода GET

Теперь создадим метод внутри шаблона. Выберем HTTP-метод GET. В поле "Обработчик" нажмем на лупу, чтобы система сгенерировала функцию в модуле сервиса. Разберем по шагам код, который позволит нам вернуть данные клиенту в формате JSON.


Функция ПолучитьОстатокGet(Запрос)
    // Извлекаем параметр из URL
    Артикул = Запрос.ПараметрыШаблона.Получить("Articul");
    
    // Подготавливаем структуру ответа
    ДанныеОтвета = Новый Структура;
    ДанныеОтвета.Вставить("Артикул", Артикул);
    ДанныеОтвета.Вставить("Остаток", 0);
    ДанныеОтвета.Вставить("Статус", "Товар не найден");
    
    // Выполняем поиск в базе (условный пример)
    ЗапросКБД = Новый Запрос;
    ЗапросКБД.Текст = 
    "ВЫБРАТЬ
    |	ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.Артикул = &Артикул) КАК ТоварыНаСкладахОстатки";
    
    ЗапросКБД.УстановитьПараметр("Артикул", Артикул);
    Выборка = ЗапросКБД.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        ДанныеОтвета.Остаток = Выборка.Остаток;
        ДанныеОтвета.Статус = "Success";
    КонецЕсли;
    
    // Формируем JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // Формируем HTTP-ответ
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    
    Возврат Ответ;
КонецФункции

В данном примере мы использовали объект HTTPСервисЗапрос для получения параметров и HTTPСервисОтвет для возврата результата. Обратите внимание на важность установки заголовка Content-Type, чтобы вызывающая сторона понимала, как интерпретировать полученный поток байт.

Шаг 3. Обработка POST-запросов и прием данных

Зачастую нам нужно не только отдавать данные, но и принимать их (например, для создания заказа). Рассмотрим, как реализовать метод POST. Создадим новый шаблон /createOrder и соответствующий метод. В этом случае данные будут передаваться в теле (Body) запроса.

Выясним причину, по которой часто возникают ошибки при чтении тела запроса: это неверная кодировка или попытка прочитать поток дважды. Рассмотрим правильный алгоритм работы с входящим JSON:


Функция СоздатьЗаказPost(Запрос)
    // Читаем тело запроса
    СтрокаТела = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаТела);
    
    Попытка
        ДанныеЗаказа = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        
        // Здесь должна быть логика создания документа в 1С
        // Например: Док = Документы.ЗаказПокупателя.СоздатьДокумент();
        
        Ответ = Новый HTTPСервисОтвет(201); // Created
        Ответ.УстановитьТелоИзСтроки("Заказ успешно создан");
    Исключение
        Ответ = Новый HTTPСервисОтвет(400); // Bad Request
        Ответ.УстановитьТелоИзСтроки("Ошибка формата JSON: " + ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Ответ;
КонецФункции

Шаг 4. Публикация сервиса на веб-сервере

После написания кода сервис необходимо сделать доступным для внешнего мира. Рассмотрим подробнее процесс публикации. Для этого нам понадобится веб-сервер (например, Apache или IIS).

Посмотрим на алгоритм действий в конфигураторе:

  1. Зайдем в меню Администрирование — Публикация на веб-сервере.
  2. На вкладке "HTTP-сервисы" установим флажок напротив нашего сервиса СкладскиеОстатки.
  3. Укажем имя публикации (например, base_api) и нажмем "Опубликовать".

После этого наш сервис будет доступен по адресу вида: http://server_name/base_api/hs/stock/get/A12345. Обратите внимание, что сегмент /hs/ добавляется платформой автоматически и указывает на то, что обращение идет именно к HTTP-сервису.

Важные аспекты безопасности

Проанализируем вопрос защиты данных. По умолчанию 1С потребует авторизацию. Мы можем использовать несколько подходов:

Важный момент: всегда проверяйте входящие данные на соответствие типам 1С. Если вы ожидаете число в поле Количество, обязательно выполните преобразование типов, прежде чем записывать данные в базу, чтобы избежать исключительных ситуаций.

Отладка HTTP-сервисов

Отладка таких сервисов имеет свои особенности. Чтобы точка останова сработала в модуле HTTP-сервиса, необходимо:

  1. Включить отладку на сервере 1С (параметр -debug).
  2. В настройках отладки в конфигураторе выбрать пункт "Автоматическое подключение" для типов "HTTP-сервисы".
  3. Использовать внешние инструменты, такие как Postman или cURL, для отправки тестовых запросов.

Разберем типичную ситуацию: запрос уходит, но 1С возвращает ошибку 404 Not Found. Проанализируем возможные причины: неверно указан корневой URL, пропущен сегмент /hs/ в пути, или после внесения изменений в структуру шаблонов не была обновлена публикация на веб-сервере. Всегда перепубликовывайте сервис после изменения структуры шаблонов или имен методов.

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

← На главную