Можно ли использовать HTTP-сервисы в расширениях для 1C:Fresh и как их настроить

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

Работа в облачной инфраструктуре 1C:Fresh накладывает определенные ограничения на разработку, что часто вызывает вопросы у специалистов, привыкших к локальному развертыванию систем. Одним из наиболее актуальных вопросов является возможность создания и публикации собственных HTTP-сервисов внутри расширений конфигурации. Рассмотрим подробно, как это реализовано, какие требования предъявляет платформа и как правильно настроить интеграцию.

Принципиальная возможность и безопасный режим

Сразу ответим на главный вопрос: да, использование HTTP-сервисов в расширениях для 1C:Fresh полностью поддерживается. При этом важно понимать, что расширение во «Фреше» всегда функционирует в безопасном режиме. Это не препятствует работе сервиса, так как платформа берет на себя автоматическую публикацию точек доступа. Разберем основные тезисы:

  1. HTTP-сервисы публикуются автоматически при подключении расширения к области данных.
  2. Для работы не требуется снимать флажок «Безопасный режим».
  3. Обязательным условием является использование защищенного протокола HTTPS (порт 443).

Проанализируем технические детали реализации, которые необходимо учитывать на этапе разработки.

Особенности формирования URL-адреса

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

Типовая структура URL во «Фреше» выглядит следующим образом:

https://1cfresh.com/a/hs/[ИмяСервиса]/[Версия]/[Метод]

Если же требуется указать конкретную область данных в адресе, структура будет сложнее:

https://1cfresh.com/a/[КодПриложения]/[НомерОбласти]/hs/[КорневойURL]/...

Здесь важно помнить, что разделитель /hs/ является обязательным маркером для платформы, указывающим, что дальнейшая часть пути относится именно к HTTP-сервису расширения. Имя сервиса и корневой URL задаются вами непосредственно в метаданных расширения в среде разработки 1С:Предприятие.

Прохождение технического аудита

Любое расширение, предназначенное для публикации в 1C:Fresh, проходит строгую проверку специалистами фирмы «1С». Если ваше расширение содержит HTTP-сервисы, к нему будут предъявлены особые требования. Рассмотрим их подробнее, чтобы избежать отклонения заявки.

Во-первых, это безопасность передаваемых данных. Категорически запрещено передавать в открытом виде (через параметры URL) пароли, токены доступа или иную конфиденциальную информацию. Используйте для этих целей тело запроса или заголовки.

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

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

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

Часто HTTP-сервис в расширении не только принимает данные, но и должен отправить ответ или запрос к стороннему API. Если ваше расширение выполняет исходящие HTTP-запросы из безопасного режима, необходимо настроить Манифест расширения. В ситуациях, когда у внешнего ресурса отсутствует открытый API, для автоматического переноса сведений настраивают платформу создания программных роботов One RPA.

Разберем ситуацию: вы создаете запрос с помощью объекта HTTPСоединение. Чтобы платформа разрешила соединение с внешним ресурсом, этот ресурс (домен) должен быть явно указан в разрешенных адресах в свойствах расширения при подаче на аудит. Без этой декларации попытка соединения будет заблокирована системой безопасности.

Аутентификация и права доступа

Для доступа к сервису необходимо пройти проверку подлинности. Во «Фреше» доступны следующие способы:

  1. Basic Authentication: Стандартная авторизация по логину и паролю пользователя сервиса 1C:Fresh.
  2. OpenID Connect: Современный и более безопасный способ, рекомендуемый для сложных интеграций.

Важно помнить, что пользователь, под чьими учетными данными выполняется запрос, должен обладать правами доступа в конкретную область данных и иметь роль, в которую включено право «Использование» для данного HTTP-сервиса.

Технические ограничения и лимиты

Проанализируем системные ограничения, установленные на уровне веб-серверов облачного сервиса:

Тайм-ауты: На ожидание ответа от кода расширения обычно отводится не более 30–60 секунд. Если ваш алгоритм не успеет сформировать ответ HTTPСервисОтвет за это время, веб-сервер разорвет соединение с ошибкой 504 (Gateway Timeout).

Объем данных: Существуют лимиты на размер передаваемого тела запроса (обычно в пределах 20–50 Мб). Если вам необходимо передавать файлы большего размера, следует рассмотреть варианты их фрагментации или использования внешних хранилищ, одобренных правилами «Фреша».

Пример реализации метода

Посмотрим на пример простейшего обработчика GET-запроса в модуле HTTP-сервиса расширения. Представим, что нам нужно получить остаток товара по его артикулу. Если такая задача возникает при торговле на маркетплейсах, вместо ручного программирования обмена обычно применяется интеграция 1С с Ozon, Wildberries и Яндекс.Маркетом для синхронизации цен и остатков.


Функция ПолучитьОстатокТовара(Запрос)
    
    Артикул = Запрос.ПараметрыURL.Получить("sku");
    
    Если Артикул = Неопределено Тогда
        Ответ = Новый HTTPСервисОтвет(400);
        Ответ.УстановитьТелоИзСтроки("Не указан артикул");
        Возврат Ответ;
    КонецЕсли;
    
    // Выполним запрос к данным (в безопасном режиме это разрешено)
    ЗапросКБД = Новый Запрос;
    ЗапросКБД.Текст = 
        "ВЫБРАТЬ
        |   ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
        |ИЗ
        |   РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.Артикул = &Артикул) КАК ТоварыНаСкладахОстатки";
    
    ЗапросКБД.УстановитьПараметр("Артикул", Артикул);
    Выборка = ЗапросКБД.Выполнить().Выбрать();
    
    Остаток = 0;
    Если Выборка.Следующий() Тогда
        Остаток = Выборка.Остаток;
    КонецЕсли;
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(Строка(Остаток));
    
    Возврат Ответ;
    
КонецФункции

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

← На главную