Как создать и настроить HTTP-сервис в 1С 8.3 для интеграции со сторонними системами?

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

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

Постановка задачи и выбор архитектуры

Прежде чем приступать к разработке, проанализируем ситуацию: нам необходимо организовать точку входа в систему 1С, которая будет принимать данные (например, заказы с сайта) в формате JSON и возвращать результат обработки. Использование HTTP-сервисов предпочтительнее классических SOAP-веб-сервисов (Web Services) из-за меньшего объема передаваемых данных (отсутствие избыточных XML-оберток) и высокой скорости работы.

Шаг 1. Создание объекта HTTP-сервис в метаданных

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

  1. Перейдем в ветку метаданных Общие — HTTP-сервисы.
  2. Добавим новый объект. Назовем его, например, ОбменСЗаказами.
  3. Укажем Корневой URL. Это идентификатор, который будет использоваться в адресе обращения. Пусть это будет orders_api.

Шаг 2. Настройка URL-шаблонов и методов

Разберем подробнее структуру URL-шаблона. Шаблон определяет, по какому именно адресу будет доступен наш метод. Выясним причину, почему важно правильно именовать шаблоны: это влияет на читаемость API и удобство его поддержки.

Создадим шаблон с именем Заказ и шаблоном пути /v1/create/{ID}. Здесь часть {ID} в фигурных скобках является параметром, который мы сможем прочитать в коде.

Для каждого шаблона необходимо определить Методы. Чаще всего используются:

Шаг 3. Программная реализация обработчика метода

Теперь перейдем к самому важному — написанию кода в модуле HTTP-сервиса. Рассмотрим пример обработки POST-запроса, который принимает JSON с данными заказа.

Проанализируем структуру функции-обработчика. Она всегда принимает один параметр типа HTTPСервисЗапрос и должна возвращать объект типа HTTPСервисОтвет.


Функция ЗаказcreatePOST(Запрос)
    
    // 1. Получаем тело запроса в виде строки
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
    
    // 2. Десериализация JSON в структуру 1С
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    ДанныеЗаказа = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // 3. Обработка данных (создание документа)
    Попытка
        НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ДанныеЗаказа.ИмяКлиента);
        // Заполнение табличной части и других реквизитов...
        НовыйЗаказ.Записать();
        
        КодСостояния = 201; // Created
        ОтветСтруктура = Новый Структура("status, message", "success", "Заказ успешно создан");
    Исключение
        КодСостояния = 500; // Internal Server Error
        ОтветСтруктура = Новый Структура("status, error", "error", ОписаниеОшибки());
    КонецПопытки;

    // 4. Формирование ответа
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ОтветСтруктура);
    
    Ответ = Новый HTTPСервисОтвет(КодСостояния);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    Возврат Ответ;
    
КонецФункции

Шаг 4. Работа с параметрами URL и заголовками

Рассмотрим подробнее, как извлечь параметры, которые мы указали в шаблоне (например, тот самый {ID}). Посмотрим на пример кода:


// Получение параметра из URL
Идентификатор = Запрос.ПараметрыURL.Получить("ID");

// Получение параметров запроса (после знака ?)
Токен = Запрос.ПараметрыЗапроса.Получить("token");

// Чтение заголовков (Headers)
ТипКонтента = Запрос.Заголовки.Получить("Content-Type");

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

Шаг 5. Отладка и публикация

Для того чтобы сервис стал доступен извне, базу необходимо опубликовать на веб-сервере (Apache или IIS). Выполним следующие действия:

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

Для проверки работоспособности рекомендуется использовать сторонние утилиты, такие как Postman или curl. Адрес запроса будет выглядеть следующим образом: http://server_name/base_name/hs/orders_api/v1/create/123.

Рекомендации по безопасности и производительности

Разберем по шагам, как защитить наш HTTP-сервис:

Проанализируем ситуацию с большими объемами данных: если планируется передача файлов или очень тяжелых JSON, рассмотрите возможность использования ДвоичныеДанные вместо строк для экономии оперативной памяти.

Таким образом, мы рассмотрели полный цикл создания HTTP-сервиса. Использование HTTPСервисЗапрос, HTTPСервисОтвет и встроенных функций работы с JSON делает 1С мощным инструментом для построения современных распределенных систем.

← На главную