多个RESTful Web服务调用与MySQL JOIN

时间:2013-06-03 01:34:03

标签: ios web-services node.js rest design-patterns

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

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

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

例如: 假设我正在加载要在UI中显示的用户配置文件。用户具有个人资料图片,基本信息和新闻源项目。使用选项一,我会按如下方式进行:

  • 向服务器发出getUser请求,这将在DB中执行查询,如下所示:
    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个异步请求:
    • 的getUser
    • getUserInfo
    • getUserProfile
  • 每当收到任何请求时,UI都会更新

因此,考虑到这两个选项,我想知道哪个选项可以提供更好的可扩展性。

目前,由于以下原因,我打算选择2:

  1. 每个异步请求都会比选项a中的查询更快,因此可以更快地向用户显示内容
  2. 我也在整合Memecache,我觉得3个单独的调用将更容易缓存特定的结果(例如,不缓存用户配置文件,而是缓存user,user_info和user_profile_picture)。
  3. 任何想法或经历?

1 个答案:

答案 0 :(得分:1)

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

现在,您可以做的当然是使用查询语法,让您指定特定端点是否应该为您提供更多数据并将其与连接组合。这个确实需要更多的输入卫生,但它可能是值得的,因为您可以最小化请求并仍然获得适应性系统。

在服务器端,除非您一次处理数千行,否则您的两种方法中的任何一种都不可能明显慢于另一种方法