我应该在服务器端还是客户端做 API 请求?

Posted

技术标签:

【中文标题】我应该在服务器端还是客户端做 API 请求?【英文标题】:Should I do API requests server side or client side? 【发布时间】:2012-09-22 23:37:46 【问题描述】:

我正在尝试使用 ExpressJS 和 Coffeescript 制作一个从 Amazon、LastFM 和 Bing 的 Web API 提取数据的 Web 应用程序。 用户可以请求数据,例如来自特定乐队的特定专辑的价格、即将举行的音乐会时间和乐队的位置等等......类似的东西。

我的问题是:我应该使用 jQuerygetJSON 在客户端进行这些 API 调用,还是应该在服务器端调用?我已经完成了客​​户端请求;我什至如何从服务器端进行 API 调用? 我只想知道最佳实践是什么,如果有人能指出我提出服务器端 API 请求的正确方向,那将非常有帮助。

谢谢!

【问题讨论】:

【参考方案1】:

这个问题有两个主要考虑因素:

    调用会导致任何数据访问吗?结果会直接写到屏幕上吗? 您打算如何以及在哪里处理错误?您如何处理节流问题?

第 2 项在这里非常重要,因为 Web 服务总是因为各种原因而中断。您对 Bing、Amazon 和 Last FM 的调用可能会失败 1% 或 0.1% 的时间(根据我在这里的经验)。

要向用户请求服务器端 JS,您可能需要查看 Request package on NPM。

【讨论】:

感谢您的链接。你下面的两个答案都提到了http.request。我想知道Request npm 包有什么不同?使用起来更简单吗? http.request 库是非常低级的访问。 NPM 中的 Request 库支持 OAuth、cookie、流和表单提交等内容。如果您尝试将呼叫代理给第三方,您将需要此工具。 谢谢。我一定会试试这个!【参考方案2】:

抽象出您的存储和相关服务以隔离更改并为您的应用程序提供统一且一致的 Web API 通常是件好事。但有时,如果你有一个好的超媒体 web api(RESTful 响应链接到其他资源),你可以在你的服务的响应中引用另一个服务的资源链接(例如:SO 请求可以引用用户的 gravatar 图像/资源)。没有一种适合所有人的方式 - 这取决于您是要封装依赖项还是与它集成。

将来自您的服务的 web-api 请求通过 expressjs 公开为您自己的 web-api 可能会有所帮助。

从节点发起 http web-api 请求很容易。这是另一篇涵盖该内容的 SO 帖子:

HTTP GET Request in Node.js Express

【讨论】:

感谢您的链接。我会试试这个。我还可以问一下,您将这个 getJSON 模块放在应用程序结构中的什么位置?假设我不会将调用结果存储到我的数据库中。 另外,在您的另一篇文章中,您提到您有一个更完整的示例。那个offer还好吗? 当然,为了玩耍和演示,我编写了一个学生休息服务,它通过 http 存储请求与 Parse.com 对话:github.com/bryanmacfarlane/nodefun/tree/master/express/… 请注意,demo 和 secrets.js 的质量“玩弄”,需要替换 parse.com 密钥才能正常工作。【参考方案3】:

嗯,你描述它的方式我想你可能想从amazon、lastfm等获取数据,用node处理它,保存在你的数据库中并提供你自己的api。

您可以使用节点的http.request() 来获取数据并使用express.js 构建自己的rest api

【讨论】:

以上是关于我应该在服务器端还是客户端做 API 请求?的主要内容,如果未能解决你的问题,请参考以下文章

websocket

ReactJS - 简单的服务器端 API 请求

用java做后台用nodejs做前台是啥意思

社交媒体提要 - 客户端或服务器端请求?

我应该订购 GraphQL 结果服务器端还是客户端?

Python中 服务器端获取webservice客户端IP地址