Как опубликовать HTTP сервис 1С из расширения

Как опубликовать http сервис 1с из расширения

Как опубликовать http сервис 1с из расширения

Расширения в 1С позволяют внедрять собственные механизмы в конфигурацию без изменения её исходного кода. Один из востребованных сценариев – публикация HTTP сервиса, который может принимать запросы извне и возвращать данные в формате JSON или XML. Такой подход используется для интеграции с веб-приложениями, мобильными клиентами или внешними сервисами.

В расширении можно определить HTTP-сервис через подсистему «Веб-сервисы и HTTP-сервисы». Для этого в объекте конфигурации создаётся общий модуль с экспортными методами, которые будут доступны по определённому URL. Важно учитывать, что имя модуля и маршрут сервиса напрямую влияют на конечный адрес публикации. Например, метод ОбработатьЗапрос в модуле HTTPСервисКлиенты будет вызван при обращении к адресу /http/Клиенты.

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

Чтобы обеспечить корректную работу, рекомендуется явно указывать метод запроса (GET, POST) и возвращать результат через объект HTTPСервисОтвет, устанавливая MIME-тип. Например, для JSON-данных используется application/json. Такой подход гарантирует совместимость с любыми внешними клиентами.

Создание расширения и подключение к конфигурации

Создание расширения и подключение к конфигурации

В конфигураторе выберите пункт Конфигурация → Расширения конфигурации и создайте новое расширение. Укажите имя, понятное по назначению, например HTTPService. Тип расширения оставьте «Обычное».

После создания расширения перейдите в его свойства и задайте назначение: «Для доработки». Это позволит подключить объекты и модули без изменения основной конфигурации.

Добавьте общий модуль в расширении, установите флажок «Сервер» и «Вызов сервера». В этом модуле будет размещаться обработка HTTP-запросов.

Для подключения расширения откройте Администрирование → Поддержка и обслуживание → Расширения конфигурации, загрузите созданный файл *.cfe и активируйте его. После активации расширение становится частью конфигурации, и доступ к его объектам возможен сразу без публикации полной базы.

Если требуется обновление, используйте выгрузку/загрузку расширения через файл. Это гарантирует переносимость между стендами и минимизирует риск изменения основной конфигурации.

Добавление общего модуля с экспортными методами

Добавление общего модуля с экспортными методами

В расширении создайте общий модуль и установите флажки Экспорт и Сервер. Это позволит вызывать функции из HTTP-сервиса и обращаться к ним напрямую.

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

Внутри модуля определите отдельные функции для обработки запросов: чтение тела, работа с JSON, формирование ответа. Например, используйте ЧтениеJSONИзСтроки() для разбора данных и ЗаписатьJSONВСтроку() для формирования результата.

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

Разделяйте методы по назначению: один отвечает за аутентификацию, другой за обработку запроса, третий за формирование ответа. Это облегчает отладку и дальнейшее расширение функционала.

Регистрация HTTP-сервиса через менеджер расширений

Для регистрации HTTP-сервиса в расширении используется объект МенеджерРасширений. Он обеспечивает доступ к точкам расширения и позволяет подключать собственные обработчики HTTP-запросов без изменения основной конфигурации.

В модуле расширения необходимо вызвать метод МенеджерРасширений.ДобавитьОбработчикHTTPЗапроса(), передав три параметра: путь сервиса, имя общего модуля и экспортируемую процедуру, которая будет обрабатывать входящие запросы.

Пример:

МенеджерРасширений.ДобавитьОбработчикHTTPЗапроса(«/api/orders», «ОбщийМодуль.МодульСервиса», «ОбработатьЗаказ»);

Важно, чтобы модуль был доступен для сервера и имел экспортируемую процедуру с сигнатурой Процедура(HTTPЗапрос, HTTPОтвет). Внутри процедуры можно анализировать метод запроса (GET, POST), заголовки и тело, формировать ответ с помощью объекта HTTPОтвет.

Если требуется зарегистрировать несколько сервисов, каждый маршрут указывается отдельным вызовом ДобавитьОбработчикHTTPЗапроса. Пути должны быть уникальными, иначе последний зарегистрированный обработчик перезапишет предыдущий.

После публикации расширения и его активации сервис становится доступен по адресу http://server:port/имя_базы/api/orders. При изменении маршрутов достаточно перезагрузить расширение, без перекомпиляции основной конфигурации.

Настройка маршрутов и обработка входящих запросов

Настройка маршрутов и обработка входящих запросов

В расширении 1С маршруты для HTTP-сервиса регистрируются через метод ОпубликоватьМаршрут() объекта HTTPСервис. Каждый маршрут связывается с конкретной серверной процедурой модуля расширения.

  • Шаблон маршрута: строка с путём и параметрами, например /api/orders/{Номер}.
  • Метод запроса: указывается при регистрации (GET, POST, PUT, DELETE).
  • Обработчик: имя экспортной процедуры или функции, которая принимает объект HTTPЗапрос и возвращает HTTPОтвет.

Пример регистрации:

HTTPСервис.ОпубликоватьМаршрут("GET", "/api/orders/{Номер}", "ПолучитьЗаказ");
HTTPСервис.ОпубликоватьМаршрут("POST", "/api/orders", "СоздатьЗаказ");

При обработке запроса важно:

  1. Извлекать параметры маршрута через Запрос.ПараметрыURL.
  2. Читать тело запроса методом Запрос.ПолучитьТелоКакСтроку() или Запрос.ПолучитьТелоКакJSON().
  3. Формировать ответ через HTTPОтвет, задавая код состояния (КодыСостоянияHTTP) и тип содержимого.
  4. Возвращать только структурированные данные (JSON, XML) – строки или двоичный поток оборачиваются методом УстановитьТелоИзСтроки() или УстановитьТелоИзПотока().

Для обработки ошибок рекомендуется определять единый формат ответа, например:

{
"error": true,
"code": 404,
"message": "Заказ не найден"
}

При необходимости можно создавать групповые маршруты с общим префиксом, что упрощает организацию API, например /api/orders/..., /api/customers/....

Возврат ответа в формате JSON или XML

В обработчике HTTP-запроса из расширения 1С можно формировать ответ в нескольких форматах. Чаще всего используются JSON и XML, так как их понимают внешние системы.

Формирование JSON:

  1. Создать структуру или массив с результатом.
  2. Преобразовать в строку функцией JSONСтрока = ФорматJSON(Данные).
  3. Установить заголовок ответа: Ответ.УстановитьЗаголовок("Content-Type", "application/json; charset=utf-8").
  4. Записать строку в тело: Ответ.УстановитьТелоИзСтроки(JSONСтрока).

Формирование XML:

  1. Создать объект XMLДокумент = Новый XMLДокумент и заполнить узлы.
  2. Сериализовать документ в строку: XMLСтрока = XMLДокумент.Записать().
  3. Установить заголовок: Ответ.УстановитьЗаголовок("Content-Type", "application/xml; charset=utf-8").
  4. Передать строку в тело: Ответ.УстановитьТелоИзСтроки(XMLСтрока).

Рекомендации:

  • Явно указывайте кодировку UTF-8, иначе клиенты могут получить искажённые символы.
  • При JSON-ответах используйте структуры с примитивными типами, избегайте ссылочных объектов 1С.
  • Для XML предпочтительно задавать пространства имён, если предполагается интеграция с внешними системами.
  • Проверяйте корректность формата через отладчик браузера или curl, прежде чем отдавать в продуктив.

Использование авторизации и проверка прав доступа

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

Для авторизации через встроенные средства 1С необходимо включить параметр «Требовать аутентификацию» при публикации сервиса и использовать методы объекта Пользователи для проверки текущего пользователя. Пример проверки прав:

Метод Описание Пример использования
ПользовательАктивен() Проверяет, активен ли текущий пользователь Если Не ПользовательАктивен() Тогда Возврат Ошибка("Доступ запрещен"); КонецЕсли;
ПроверитьПравоДоступа(Объект, Действие) Проверяет, имеет ли пользователь право на конкретное действие над объектом Если Не ПроверитьПравоДоступа("Справочники.Номенклатура", "Чтение") Тогда Возврат Ошибка("Нет прав"); КонецЕсли;

Для внешней авторизации через HTTP-заголовки рекомендуется использовать токены или ключи API. При этом расширение должно проверять заголовок Authorization и сопоставлять его с актуальными ключами. Пример проверки:

Заголовок Проверка Действие при ошибке
Authorization: Bearer <токен> Сравнение с таблицей активных токенов Возврат HTTP 401 и сообщение «Недопустимый токен»

Важно использовать дифференцированные права доступа для разных методов сервиса. Для каждого метода создается проверка, например:

Метод сервиса Требуемое право
ПолучитьЗаказы ЧтениеЗаказы
СоздатьЗаказ ДобавлениеЗаказы
УдалитьЗаказ УдалениеЗаказы

Рекомендуется логировать все попытки доступа с указанием пользователя, метода и результата проверки прав. Это позволяет оперативно выявлять попытки несанкционированного использования и предотвращать нарушения безопасности.

Отладка HTTP-сервиса в режиме предприятия

Отладка HTTP-сервиса в режиме предприятия

Для отладки HTTP-сервиса в режиме предприятия необходимо использовать встроенные возможности 1С:Предприятия. Первым шагом включите журнал регистрации запросов и ошибок: откройте Администрирование → Настройки серверов → Журнал регистрации и активируйте запись событий уровня Подробный для HTTP-сервисов.

Используйте метод ВызовСервиса в тестовых обработках, передавая точные параметры запроса. Для анализа заголовков и тела ответа включите логирование через HTTPСервис.Передать, фиксируя Метод, URL и Тело запроса. Это позволяет выявить несоответствия формата данных или ошибки сериализации JSON.

В случае получения HTTP 500 или некорректного формата ответа, включите Отладчик предприятия и установите точки останова в методах публикации сервиса, таких как ОбработкаЗапроса и ФормированиеОтвета. Проверяйте, что объект Ответ корректно формируется и не содержит пустых значений обязательных полей.

Для ускорения анализа ошибок рекомендуется использовать утилиту Postman или встроенный REST-клиент. Отправляйте идентичные запросы, сравнивайте тело ответа с ожидаемой структурой, фиксируйте время выполнения и размер данных. Это позволяет выявлять узкие места и исключения на этапе исполнения сервиса.

При отладке многопользовательской среды учитывайте, что сервис выполняется в контексте сеанса конкретного пользователя. Используйте ИмяПользователя и ПраваДоступа для проверки корректности обработки авторизации и доступа к данным. Ошибки в правах часто проявляются как HTTP 403 или пустой JSON-ответ.

Наконец, сохраняйте все тестовые сценарии и журналы для последующего анализа и документирования. Это позволяет быстро воспроизводить ошибки и корректировать обработку запросов без риска повлиять на реальную базу данных.

Публикация и проверка работы сервиса на веб-сервере

Для публикации HTTP сервиса 1С из расширения необходимо использовать встроенный механизм публикации веб-сервисов. В конфигураторе откройте расширение, перейдите в раздел «Веб-сервисы» и добавьте новый объект типа «HTTP-сервис». Укажите имя сервиса, описание и набор методов, которые будут доступны извне.

В свойствах сервиса задайте URL-путь, по которому сервис будет доступен на веб-сервере. Например, для локального тестирования можно использовать путь /MyService. Обязательно укажите, что сервис доступен через HTTP и HTTPS, если требуется защищенное соединение.

На веб-сервере IIS или Apache создайте виртуальный каталог, указывающий на каталог публикации информационной базы 1С. В настройках IIS активируйте обработку запросов к *.wsdl и *.svc, если планируется использование WSDL. В случае HTTPS настройте корректный сертификат SSL и привяжите его к сайту.

После публикации проверьте работу сервиса через стандартный браузер или инструмент типа Postman. Для проверки WSDL введите URL вида http://<сервер>/<путь_сервиса>?wsdl. Должна вернуться корректная XML-схема. Для проверки методов выполните POST-запрос с телом в формате JSON или SOAP, в зависимости от типа сервиса.

Для мониторинга и отладки включите логирование вызовов на сервере 1С. В свойствах HTTP-сервиса отметьте «Вести журнал вызовов». Это позволит анализировать ошибки и проверять корректность обработки входящих запросов.

При обнаружении ошибок доступа убедитесь, что порт веб-сервера открыт в брандмауэре, а права пользователя, под которым работает сервер, позволяют выполнять методы сервиса. Для автоматического тестирования можно использовать скрипты на Python или PowerShell, отправляющие запросы к каждому методу и сверяющие ответы с ожидаемыми.

Вопрос-ответ:

Каким образом можно создать HTTP-сервис в расширении 1С?

Чтобы создать HTTP-сервис в расширении 1С, необходимо добавить объект типа «HTTP-сервис» в конфигурацию расширения. В модуле сервиса описываются процедуры и функции, которые будут доступны внешним клиентам через HTTP-запросы. Далее нужно определить маршруты для вызова этих процедур, а также указать параметры и методы доступа, например, GET или POST.

Как настроить маршрутизацию для методов HTTP-сервиса?

Маршрутизация настраивается через модуль HTTP-сервиса. Для каждого метода сервиса указывается URL, по которому он будет доступен. В модуле можно использовать директиву «Маршрут», чтобы связать конкретную функцию с определённым адресом. Также можно задать фильтры и параметры запроса, чтобы обрабатывать разные варианты вызова одного метода.

Какие ограничения накладывает публикация сервиса из расширения на клиентские вызовы?

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

Нужно ли регистрировать HTTP-сервис в информационной базе перед публикацией?

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

Как тестировать опубликованный HTTP-сервис без внешнего клиента?

Для тестирования можно использовать встроенный в 1С механизм обработки HTTP-запросов через HTTP-клиент или специализированные тестовые процедуры. Также можно воспользоваться инструментами вроде Postman или curl, указывая URL маршрута и необходимые параметры. Это позволяет проверять корректность работы методов, форматы возвращаемых данных и обработку ошибок до того, как сервис будет использоваться внешними приложениями.

Ссылка на основную публикацию