【问题标题】:External API calls from the frontend or backend?来自前端或后端的外部 API 调用?
【发布时间】:2017-02-03 22:44:47
【问题描述】:

场景: 我有一个 Node 和 Angular Web 应用程序。 它需要为数据调用外部 api(第三方服务)(更具体地说:https://api.represent.me/api/questions/)。

问题: 从Angular前端进行这个外部调用是否更好:GET http://thirdpartyservice.com/api/data或让前端调用相同的域节点端点:GET http://example.com/node-backend-api然后调用GET http://thirdpartyservice.com/api/data,然后在传递之前从第三方api获取并处理数据它回到角度?

想法:

  • 我猜两个 api 调用不太理想,但它在同一个域上 那么这真的不是问题吗?
  • 从节点端获取会更安全(尤其是在秘密的情况下) 密钥被使用),并且还掩盖了第三方服务是 用过。
  • 如果从前端调用,CORS 内容可能会妨碍您。
  • 这里是上下文键,例如从调用字体 api 前端可能是最好的,但获取并需要处理数据 从后端可能会更好。

其他人推荐(和做)什么,还有其他支持或反对的观点可以添加到“想法”中吗?

【问题讨论】:

  • 我会说这取决于什么样的第三方服务以及您使用它们的用途:) 所有前端依赖项都应该从前端调用,所有后端依赖项都应该从后端调用。
  • 如果您不想处理来自 API 的响应,那么前端就可以了。但是,如果您从后端调用 API,您将获得额外的灵活性来操纵响应(当您获得大量数据作为响应时很有用)、过滤、添加额外数据等等,同时降低了服务器上的额外负载。这取决于你想对响应做什么:)
  • 非常有帮助,是的,额外的数据处理,也许同时向数据库添加数据肯定是后端的工作。我认为根据从前端调用的前端依赖项和从后端调用的后端依赖项来看待它是一种很好的看待它的方法

标签: angularjs node.js api


【解决方案1】:

我想说我们还应该注意代码重复。在您的情况下,您都是 JavaScript,但对于许多其他人来说并非如此。所以假设我使用api.github.com,所以我不想从前端和后端进行一些调用,那么我认为创建一个可以处理所有这些的控制器是一个不错的选择。

除了像任何分析或跟踪软件这样的情况外,额外的往返是可以的。

正如@Wolffc 所说,这也可以防止将access_token 发送到可能被滥用的浏览器。

【讨论】:

    【解决方案2】:

    这取决于您的 3rd 方 API 需要什么。

    如果您需要一些凭据来调用 API,出于安全考虑,最好在后端处理调用。

    如果 API 提供对时间敏感的数据,例如在您键入时自动完成的一些信息,那么最好不要在后端进行额外的往返并从前端调用它。

    您可以创建一个指向第 3 方服务器的子域, 像 3rdparty-api.yourdomain.com 一样,这消除了很多跨域问题。但这需要您的第 3 方提供商的合作。

    因此,没有明确的“是”或“否”答案,但这取决于您的 API 的情况和重点。

    【讨论】:

    • 有趣,我从没想过创建一个子域来尝试消除跨域问题,会研究一下
    • 子域是一个有趣的想法,但我认为很多 API 更有可能已经支持 CORS,而不是自定义 CNAME。话虽如此,如果他们的 API 在不需要主机名的情况下响应 IP 地址......那么没有什么能阻止你;)
    【解决方案3】:

    您的解决方案看起来不错,唯一可能妨碍您的是您使用的第 3 方 API 是否提供任何类型的分析。如果您从 Node 调用它,您将覆盖从 UI 调用时将收集的代理和 IP 信息。除此之外,我相信直接从 UI 发出请求可以减少一点服务器上的负载,但我不知道这对你是否重要。

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 2020-01-01
      • 2021-09-11
      • 1970-01-01
      • 2018-12-05
      • 2018-02-17
      • 2018-07-30
      • 1970-01-01
      • 2018-04-01
      相关资源
      最近更新 更多