2016-09-26 88 views
5

场景: 我有一个Node和Angular web应用程序。 它需要调用一个外部API(第三方服务)来获取数据(更具体地说是:https://api.represent.me/api/questions/)。来自前端或后端的外部API调用?

问: 是更好地从角前端使这种外部电话:GET http://thirdpartyservice.com/api/data或具有前端调用同一域节点端点:GET http://example.com/node-backend-api,然后调用GET http://thirdpartyservice.com/api/data然后它会从第三方处理数据api在将它传回角度之前?

思考:

  • 我想两个API调用是不太理想的,但它是在同一个域 所以就这算不上是一个问题?
  • 从节点端获取会更安全(尤其是在使用秘密密钥 时),并且还掩盖了使用第三方服务的事实 。
  • 如果从前端调用,CORS的东西可能会阻碍。
  • 这里是关键词,例如,从 前端调用字体apis可能是最好的,但从后端获取并需要处理数据 可能会更好。

其他人推荐(和做)什么,有没有其他的赞成或反对点“思想”?

+0

我会说它取决于什么样的第三方服务和你使用它们:)所有的前端依赖应该从前端调用,并从后端调用所有的后端依赖。 – Andurit

+0

如果你不想处理来自API的响应,那么前端将做。但是,如果您从后端调用API,则可以更灵活地处理响应(当您获得大量数据时很有用),过滤,添加额外数据等,并在服务器的额外负载上妥协。这取决于你想要做什么与响应:) –

+0

所有非常有帮助的,是对数据的额外处理,并且可能同时向数据库添加数据肯定会成为后端的工作。我认为从前端调用前端依赖关系和后端后端依赖关系来看它是一种很好的方式来看待它 – timhc22

回答

2

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

如果您需要某些凭证来调用API,那么可能会因为安全问题而在后端处理呼叫。

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

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

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

+1

有趣的是,我从来没有想过创建一个子域来尝试和消除跨域问题,将看看这个 – timhc22

+0

该子域是一个有趣的想法,但我认为很多API比定制CNAME更可能已经支持CORS。话虽如此,如果他们的API在不需要主机名的情况下对IP地址做出响应......那么就不会有任何事情阻止你;) –

1

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

0

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

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

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