Работа в облачной инфраструктуре 1C:Fresh накладывает определенные ограничения на разработку, что часто вызывает вопросы у специалистов, привыкших к локальному развертыванию систем. Одним из наиболее актуальных вопросов является возможность создания и публикации собственных HTTP-сервисов внутри расширений конфигурации. Рассмотрим подробно, как это реализовано, какие требования предъявляет платформа и как правильно настроить интеграцию.
Сразу ответим на главный вопрос: да, использование HTTP-сервисов в расширениях для 1C:Fresh полностью поддерживается. При этом важно понимать, что расширение во «Фреше» всегда функционирует в безопасном режиме. Это не препятствует работе сервиса, так как платформа берет на себя автоматическую публикацию точек доступа. Разберем основные тезисы:
Проанализируем технические детали реализации, которые необходимо учитывать на этапе разработки.
В локальной версии базы данных путь к 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Соединение. Чтобы платформа разрешила соединение с внешним ресурсом, этот ресурс (домен) должен быть явно указан в разрешенных адресах в свойствах расширения при подаче на аудит. Без этой декларации попытка соединения будет заблокирована системой безопасности.
Для доступа к сервису необходимо пройти проверку подлинности. Во «Фреше» доступны следующие способы:
Важно помнить, что пользователь, под чьими учетными данными выполняется запрос, должен обладать правами доступа в конкретную область данных и иметь роль, в которую включено право «Использование» для данного 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-запрос.