来自前端或后端的外部API调用?

时间:2016-09-26 14:21:21

标签: angularjs node.js api

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

问题: 从Angular前端进行此外部调用更好:GET http://thirdpartyservice.com/api/data还是让前端调用相同的域Node端点:GET http://example.com/node-backend-api然后调用GET http://thirdpartyservice.com/api/data然后从typedef struct my_type my_type; 获取并处理来自第三方api在将它传回棱角分明之前?

思想:

  • 我猜两个api调用不太理想,但它在同一个域上 那么这不是一个真正的问题吗?
  • 从Node端获取将更安全(特别是如果是秘密的话) 密钥被使用),并掩盖了第三方服务的事实 使用。
  • 如果从前端打电话,CORS的东西可能会受阻。
  • 此处是上下文密钥,例如从中调用字体apis 前端可能是最好的,但是提取并需要处理数据 从后端可能更好。

其他人推荐(和做什么),还有其他任何支持或反对要添加到'思想'太?

3 个答案:

答案 0 :(得分:3)

这取决于您的第三方API需要什么。

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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