1С OData: Публикация и настройка стандартного REST интерфейса (API)
Архитектура OData (REST) в платформе 1С
Стандартный интерфейс OData — это встроенный в ядро платформы 1С механизм (RESTful API), который позволяет внешним системам (веб-сайтам, мобильным приложениям, BI-системам) читать и изменять данные информационной базы с использованием протокола HTTP(S) и форматов JSON/XML. Для его работы требуется публикация базы на веб-сервере (IIS или Apache). Без корректной публикации веб-сервер возвращает ошибки 404 Not Found или 403 Forbidden при обращении к конечным точкам /odata/standard.odata. Бизнес-риски: срыв интеграционных процессов, недоступность данных для аналитики (Power BI/Qlik).
Компоненты OData инфраструктуры
| Уровень | Компонент | Назначение / Действие |
|---|---|---|
| Веб-сервер | IIS (Application) / Apache (Alias) | Принимает HTTP-запрос и маршрутизирует его на ISAPI-расширение 1С (wsisapi.dll) или модуль (wsap24.so). |
| Шлюз 1С | Файл default.vrd | XML-файл дескриптора. Определяет, какие интерфейсы (ws, http, odata) включены для конкретной базы. |
| БД 1С | Состав стандартного интерфейса | Указание, к каким именно объектам (справочники, документы) разрешен доступ через OData (настраивается кодом). |
Пошаговое включение и настройка OData API
Сценарий 1: Публикация базы на веб-сервере (IIS/Apache)
Интерфейс OData работает только через веб-сервер. Тонкий клиент или прямое подключение (COM) не используются.
- Откройте Конфигуратор от имени Администратора. Перейдите в Администрирование -> Публикация на веб-сервере.
- Выберите веб-сервер (IIS или Apache) и задайте имя каталога (Например,
trade). - ОБЯЗАТЕЛЬНО установите галочку Публиковать стандартный интерфейс OData на вкладке OData.
- Нажмите "Опубликовать" и согласитесь на перезапуск веб-сервера.
Проверка: В файле default.vrd (лежит в каталоге публикации) должен появиться блок: <standardOdata enable="true" reuseSessions="autouse"/>.
Сценарий 2: Разрешение доступа к объектам ИБ (Включение состава)
По умолчанию 1С защищает данные, и даже при опубликованном OData все запросы к объектам вернут ошибку. Необходимо явно разрешить доступ к нужным объектам. Это делается программно.
// Запуск внешней обработки или добавление кода в процедуру ПриНачалеРаботыСистемы()
МассивОбъектов = Новый Массив;
// Добавление нужных справочников и документов
МассивОбъектов.Добавить(Метаданные.Справочники.Номенклатура);
МассивОбъектов.Добавить(Метаданные.Справочники.Контрагенты);
МассивОбъектов.Добавить(Метаданные.Документы.РеализацияТоваровУслуг);
// Установка состава OData
УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);
// Альтернатива (Крайне не рекомендуется для ИБ! Включить ВСЁ):
// УстановитьСоставСтандартногоИнтерфейсаOData(Метаданные.Справочники);
// УстановитьСоставСтандартногоИнтерфейсаOData(Метаданные.Документы);Сценарий 3: Выполнение тестового GET-запроса
Для проверки сформируйте HTTP-запрос в браузере или Postman. Добавьте параметр ?$format=json, чтобы получить ответ в JSON вместо XML (по умолчанию).
// Шаблон URL:
http://[Адрес_Сервера]/[Имя_Публикации]/odata/standard.odata/Catalog_Номенклатура?$format=json
Пример:
http://localhost/trade/odata/standard.odata/Catalog_Номенклатура?$top=10&$format=jsonТиповые ошибки администраторов
- Публикация файловой базы на продакшене: Работа OData с файловой версией 1С (без сервера предприятия) монополизирует базу веб-сервером. Другие пользователи не смогут войти. Используйте строго клиент-серверный вариант 1С.
- Игнорирование прав доступа (RLS): OData интерфейс соблюдает права пользователя 1С, под которым выполняется авторизация (Basic Auth). Если у пользователя (например, API_User) нет прав на чтение справочника Контрагенты в конфигураторе, OData вернет пустой список, даже если объект добавлен в состав.
Частые вопросы (FAQ)
Можно ли добавить в OData регистры сведений или обороты?
Да, стандартный интерфейс поддерживает чтение независимых регистров сведений, регистров накопления (обороты, остатки) и даже выполнение виртуальных таблиц. URL формируется по правилу: InformationRegister_ИмяРегистра или AccumulationRegister_ИмяРегистра_Balance.
Как авторизоваться в OData?
Используется Basic Authentication. В заголовке HTTP-запроса необходимо передавать 'Authorization: Basic <base64>', где <base64> — закодированная строка 'Логин1С:Пароль1С'. Логин и пароль должны соответствовать пользователю информационной базы.
Почему при запросе выдается ошибка HTTP 401 Unauthorized?
Это означает, что веб-сервер (IIS/Apache) перехватывает аутентификацию. В IIS необходимо отключить 'Анонимную проверку подлинности' и включить 'Базовую проверку подлинности' для каталога публикации 1С.
Как ограничить нагрузку от запросов OData на сервер 1С?
Настройте постраничную выборку (пагинацию). Внешняя система должна использовать параметры $top (ограничение количества записей) и $skip (смещение). Также можно настроить пулы рабочих процессов (rphost) в консоли кластера 1С, выделив отдельный пул для HTTP-сервисов.