Внешние вызовы 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
к браузер, который может быть неправильно.