最佳实践 - 在单页应用程序中调用 API 和服务

nes*_*h_s 1 architecture single-page-application microservices

我有一个单页应用程序,需要调用各种 Web 服务和/或 API。我想了解从 SPA 进行 api 或服务调用的普遍认可的方法是什么。目前我们有两种方法

  1. 对于某些第 3 方 API - 我们从单页应用程序直接调用,无需服务器端代理。为了实现这一点,我们启用了 CORS。

  2. 对于其他 API 调用 - 我们调用代理(包装器),该代理负责将它们重定向到适当的端点。

我们决定使用哪种方法的方式是 - 如果在调用第 3 方 API 之前需要某种数据操作 - 我们使用代理 - 否则我们直接从 SPA 进行调用。这是一个有效的方法吗?从安全角度来看,第一种方法是否可靠,您有什么反馈吗?在第一种方法中,我们有一个仅 http 的 cookie,它被用作访问令牌来调用第 3 方 api。这是否会使我们公开的 API 变得脆弱?

提前致谢

Fab*_*ien 5

我强烈建议您代理所有 API 调用。

对于某些用例来说,调用第 3 方 API 是可以的,但如果您开始必须处理很多用例,则不行。

以下是我的要点:

  • 接口 API 允许集中第 3 方 API 的列表、组织和更新。它还可以更轻松地构建您自己的跟踪、统计和监控。
  • 如果任何 API 关闭,您可以重新路由它,并提供足够的错误处理,以避免由于第 3 方 API 关闭而给您的客户带来令人沮丧的超时/丑陋的错误消息
  • 您将客户与外部服务隔离并确保其安全:是的,如果第 3 方 API 被恶意用户利用(例如:返回“不良”图片”、重定向导航...),您可以对其进行过滤。
  • 更改 API 代理的 1 个主机名很容易,更改 20 个主机名则较困难。如果您想将应用程序迁移到封闭环境(专用网络)中,那么 API 代理将成为解决所有问题的真正帮手。 DNS、代理、网关等
  • 您可以提供自己的标准化 API,与所有其他 API 接口:这将成为开发的加速器。看看GraphQL是否可以帮助您执行多 API 调用和结果大小优化。