多个REST风格的Web服务调用与MySQL联接

我目前正在使用node.js为我当前的iPhone应用程序构build一个RESTful Web服务。 目前,该系统工作如下:

  • 客户端向node.js服务器发出请求,服务器做适当的计算和MySQL查询,并返回数据
  • 客户端的反应器处理响应并更新UI

有一件事我一直在想的是对我的服务器进行多个API调用的差异(在性能和最佳实践方面)与一个在MySQL数据库中执行多个连接语句的调用,然后返回一个构造的对象。

例如:可以说我正在加载一个用户configuration文件显示在用户界面。 用户具有个人资料图片,基本信息和新闻提要项目。 使用选项一,我会做如下:

  • 向服务器发出一个getUser请求,这将在数据库中执行一个查询,如下所示:
    Select * from user join user_info on user.user_id=user_info.user_id left join user_profile_picture on user_profile_picture.user_id=user.user_id
    服务器然后将返回一个构造的用户对象,其中包含来自每个表的信息
  • 客户端等待服务器的响应并立即更新所有内容

选项2将是:

  • 向服务器发出3个asynchronous请求:
    • 的getUser
    • getUserInfo
    • getUserProfile
  • 每当收到任何请求时,UI都会更新

所以给了这两个选项,我想知道哪个提供更好的可伸缩性。

目前,我正在考虑select2,原因如下:

  1. 每个asynchronous请求将比选项a中的查询更快,从而更快地向用户显示某些内容
  2. 我也整合了Memecache,我觉得这3个独立的调用将更容易caching特定的结果(例如,不caching用户configuration文件,而是cachinguser,user_info和user_profile_picture)。

任何想法或经验?

我认为这里的关键问题是这些API调用是否总是一起进行。 如果是的话,build立一个单一的端点并执行一个连接是更有意义的。 但是,如果情况并非如此,那么你应该保持独立。

现在,您可以做的是使用查询语法,让您指定特定端点是否应该为您提供更多数据并将其与联接结合使用。 这确实需要更多的卫生投入,但这可能是值得的,因为您可以最大限度地减less请求,并获得适应性强的系统。

在服务器端,除非每次处理数千行,否则两种方法中的任何一种都不太可能比另一种慢得多