Как создать REST-сервис в 1С для получения данных о номенклатуре предприятия?

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

Разработка REST-сервиса в среде 1С:Предприятие — это современный и эффективный способ интеграции учетной системы с внешними веб-сайтами, мобильными приложениями или сторонним ПО. Основная задача такого сервиса заключается в том, чтобы позволить внешней системе «постучаться» к 1С по определенному адресу и получить в ответ структурированные данные (обычно в формате JSON или XML). Рассмотрим подробно, как это реализовать, и разберем два основных пути решения задачи.

Понимание концепции REST в контексте 1С

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

Вариант 1: Автоматический интерфейс OData (быстрый старт)

Платформа 1С содержит встроенный механизм, называемый автоматическим REST-интерфейсом (OData). Это самый простой путь, не требующий написания программного кода. Если вам нужно просто «открыть» справочник для чтения внешними системами, выполним следующие шаги:

  1. Откроем свойства корневого объекта конфигурации в Конфигураторе.
  2. Найдем параметр Использовать стандартный интерфейс OData и установим соответствующую галочку.
  3. Перейдем в состав состава стандартного интерфейса и выберем только те объекты, которые должны быть доступны (например, справочник Номенклатура).
  4. Опубликуем базу на веб-сервере (Apache или IIS) с включенной опцией Публиковать стандартный интерфейс OData.

После этого внешние системы смогут получать данные, используя стандартные запросы. Например, для получения списка номенклатуры адрес будет выглядеть так: http://server/base/odata/standard.odata/Catalog_Номенклатура. Рассмотрим подробнее ситуацию, когда этого функционала недостаточно.

Вариант 2: Создание собственного HTTP-сервиса (гибкая настройка)

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

Шаг 1. Создание объекта HTTP-сервис. В дереве объектов найдем ветку «Общие» -> «HTTP-сервисы» и добавим новый объект, например, NomenclatureAPI. Укажем корневой URL (например, api).

Шаг 2. Определение шаблонов URL. Создадим шаблон GetItem с путем /item/{Articul}. Параметр в фигурных скобках позволит нам передавать конкретный артикул товара прямо в строке запроса.

Шаг 3. Добавление метода. Для шаблона добавим метод GET. Именно здесь мы будем писать программный код на языке 1С, который будет обрабатывать запрос.

Шаг 4. Написание программной логики. Рассмотрим пример кода, который ищет товар по артикулу и возвращает его наименование и цену в формате JSON. Проанализируем ситуацию в модуле сервиса:


Функция GetItemGet(Запрос)
    
    // Извлекаем параметр из URL
    АртикулТовара = Запрос.ПараметрыURL.Получить("Articul");
    
    // Ищем товар в справочнике
    СсылкаНаТовар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", АртикулТовара);
    
    Если СсылкаНаТовар.Пустая() Тогда
        Ответ = Новый HTTPСервисОтвет(404); // Товар не найден
        Возврат Ответ;
    КонецЕсли;
    
    // Формируем структуру ответа
    ДанныеТовара = Новый Структура;
    ДанныеТовара.Вставить("Name", СсылкаНаТовар.Наименование);
    ДанныеТовара.Вставить("Code", СсылкаНаТовар.Код);
    
    // Сериализация в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеТовара);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // Формируем HTTP-ответ
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    
    Возврат Ответ;
    
КонецФункции

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

Чтобы созданный сервис стал доступен «извне», необходимо выполнить публикацию информационной базы. Рассмотрим, как это сделать правильно:

  1. Запустим Конфигуратор от имени администратора.
  2. Перейдем в меню Администрирование -> Публикация на веб-сервере.
  3. Укажем имя публикации и выберем веб-сервер (например, Apache 2.4).
  4. На вкладке HTTP-сервисы убедимся, что наш сервис NomenclatureAPI отмечен галочкой.
  5. Нажмем кнопку «Опубликовать». При необходимости согласимся на перезапуск веб-сервера.

После публикации сервис будет доступен по адресу: http://адрес_сервера/имя_публикации/hs/api/item/000123. Где hs — стандартный сегмент для HTTP-сервисов 1С, а 000123 — артикул конкретного товара.

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

Проанализируем вопросы защиты данных. Выставлять базу 1С в интернет без авторизации — крайне опасная практика. Разберем основные правила:

Посмотрим на типичные ошибки. Если при обращении к сервису вы получаете ошибку 401 Unauthorized, проверьте правильность передачи логина и пароля. Если ошибка 404 Not Found — проверьте правильность пути в default.vrd и корректность шаблона URL в конфигурации.

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

← На главную