HTTP Request ERROR [APP-8392]

,

Привет.
Прошу помощи, подскажите, что не так передаю?
Вызываю http request из фронта
Ошибка ERROR RUN BLOCK HttpRequest TypeError: e.forEach is not a function

мой БП

такое ощущение, что он не принимает мой json на вход в body

Причем проблема такая только когда БП из фронтенда.
Такой же БП из бэка, и все проходит нормально

БП из Бэка

БП из фронта

@borodin исправлено, проверьте

@anthony.appmaster, вроде теперь другая ошибка

image

@borodin у вас это в превью или в сгенерированном приложении? Вам нужно перепубликовать

@anthony.appmaster в опубликованном.
Даже еще раз переопубликовал и все то же

@borodin в Concat что склеиваете?

@anthony.appmaster
Делаю json из string


раз у вас статичный json то либо его положить в переменную соответствующую (json) либо сразу для входящей переменной body задайте тип json и static value (тот самый json без склеек)

@Sergei_Talai ну он не статичный, здесь я просто беру упрощенную версию.
Сейчас сделал хардкод json в body запроса, работает.

А как быть с не статичным?

Так же как вы передаете данные в headers. Request Body принимает не только json но и модели и массивы моделей и key-value модели. Можно создать виртуальную модель и ее передавать

@Sergei_Talai я имею ввиду, что мне нужно передавать именно json, но не статичный. Мне нужно его формировать сначала из разных string полученных из фронта. Поэтому я и использовал упрощенный пример concat

Мы работаем над тем, чтобы улучшить блок HTTP Request в веб приложениях. Есть ряд проблем с парсингом JSON, конвертацией.

Надеюсь на следующей неделе поправим и будет не хуже чем в бэкенде.

@OlegSotnikov хорошие новости.
Может сейчас есть какой-нибудь воркэраунд как собирать json и отправлять его в http реквест из фронта?

По воркэраунду не подскажу, нужно смотреть детальнее.

А вообще лучшей практикой является выполнение запросов к сторонним системам всегда из бэкенда за исключением случаев:

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

@OlegSotnikov хочу разобраться, то есть если я в appmaster реализую фронтенд и у меня есть свой внешний бэкэенд. Я из фронта вызываю свой бэкэнд, то мне лучше в аппмастер в бэке реализовывать всю безнес логику взаимодействия с моим бэком?

Сильно зависит от обстоятельств.

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

Если у вас бэкенд выполняет какие-то отдельные бизнес-задачи и все равно нужно будет построить полноценную работу с пользователями и другую стандартную логику, то да - 2 микросервиса на бэкенде: один это бэкенд сделанный в AppMaster, а второй ваш кастомный кодом с интеграцией по REST API или в будущем через gRPC.

При использовании нашего фронта и бэка вместе есть ряд преимуществ:

  • Поддерживается API Protection, когда фронт и бэк подписывают каждый запрос с помощью ECDSA ключей.
  • Можно ключить шифрование тела запроса с помощью AES, гарантирует приватность данных помимо TLS/SSL слоя
  • Поддержка защищенного контроля авторизационных сессий пользователя (неизвлекаемые ключи в IndexedDB для подписи каждого запроса). Практически исключает возможность кражи авторизационной сессии, безопаснее чем 99,9% всех веб приложений.
  • Есть поддержка WSS между приложениями
  • Очень легко делать запросы к серверу через автоматически генерируемые блоки Server Request, где все модели и типы держатся актуальными
  • Скоро добавится поддержка сжатия тела запроса, что может помочь в случаях когда нужно много текстовых данные отправлять на сервер и сетевые условия сложные.

С другой стороны для веб приложения запланирован дизайнер внешних интеграций, точно такой же как сейчас есть в бэкенде (умеет импортировать OpenAPI/Swagger но немного кривой пока). Комбинация HTTP Request блока и Ext API Designer даст возможность не использовать наш бэкенд. HTTP Request будет обновлен к концу следующей недели, а Ext API Designer в веб приложениях появится до конца года.

@OlegSotnikov ну вообще да, у нас есть полноценный бэк, где идет вся логика и работа с пользователями. Мы по сути хотим из фронта аппмастера брать и передавать данные в наш бэк.
Единственное, пока не понятно как прокинуть аутентификацию пользователя из нашего бэка в фронт аппмастера.

PS может действительно придется делать такого франкенштейна с нашим бэком, и бэк и фронт на Appmaster

Отлично, делайте прямую интеграцию без нашего бэкенда чтобы избежать двойной работы.

У вас наверняка авторизация через cookie или auth хэдер - вы их оба можете передавать в блоках HTTP Request в виде заголовков, хранить в глобальных переменных с persistence.

Если используется только заголовок authorization, то можно его установить блоком Set Auth Token в веб приложениях.