Внешние вызовы API из frontend и backend?

сценарий: У меня есть веб-приложение Node и Angular. Он должен вызвать внешний api( сторонний сервис) для данных (более конкретно это:https://api.represent.me/api/questions/).

вопрос: Лучше ли сделать этот внешний вызов из углового интерфейса:GET http://thirdpartyservice.com/api/data или иметь интерфейс, вызывающий ту же конечную точку узла домена:GET http://example.com/node-backend-api который затем вызывает GET http://thirdpartyservice.com/api/data, который затем извлекает и обрабатывает данные от третьих лиц api перед передачей его обратно в angular?

мысли:

  • я думаю, что два вызова api менее желательны, но они находятся в одном домене так не будет ли это действительно проблемой?
  • получение со стороны узла было бы более безопасным (особенно если секретно ключи были использованы), а также маскируют тот факт, что сторонняя служба используемый.
  • CORS материал может встать на пути, если звонить с интерфейса.
  • контекст-это ключ здесь, например, вызов API шрифтов из frontend, вероятно, лучше, но извлечение и необходимость обработки данных вероятно, лучше с бэкэнда.

что другие рекомендуют (и делают), и есть ли другие точки " за " или "против", чтобы добавить к "мыслям"?

3 ответов


Это зависит от того, что требуется вашему стороннему API.

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

Если API предоставляет конфиденциальные данные времени, например, некоторую информацию автозаполнения по мере ввода, может быть полезно не делать дополнительную поездку в бэкэнд и вызывать ее из интерфейса.

вы можете создать поддомен, который указывает на сторонний сервер, как 3rdparty-api.yourdomain.com, это устраняет множество междоменных проблем. Но это требует сотрудничества вашего стороннего поставщика.

итак, нет четкого ответа " да " или "нет", но это зависит от ситуации и фокуса вашего API.


ваше решение выглядит нормально, единственное, что может встать на вашем пути, это если сторонний API, который вы используете, предоставляет какую-либо аналитику. Если вы вызываете его из узла, вы перезапишете информацию об агенте и IP, которая будет собрана при вызове из пользовательского интерфейса. Кроме этого, я считаю, что запрос непосредственно из UI может немного уменьшить нагрузку на сервер, но я не знаю, имеет ли это значение для вас.


Я бы сказал, что мы также должны заботиться о дублировании кода. В вашем случае вы все JavaScript, но это не так для многих других. Итак, скажем, я потребляю api.github.com поэтому я не хочу делать некоторые вызовы из frontend и некоторые из бэкэнда, тогда я думаю, что создание контроллера, который будет обрабатывать все это, является хорошим выбором.

за исключением случаев, таких как любая аналитика или программное обеспечение для отслеживания, дополнительная поездка туда и обратно в порядке.

Как сказал @Wolffc, это также может запретить отправку access_token к браузер, который может быть неправильно.