结合REST请求和回复的惯例?

jwl*_*jwl 18 rest

对于复杂的Web应用程序,一个页面视图可能需要许多不同类型的数据.如果您正在进行客户端模板化并从RESTful Web服务中提取此数据,则可能必须提出大量填充页面的请求.是否存在可以组合REST请求的约定,以接收包含所需响应的单个有效负载?

要使用"堆栈交换用户"页面作为示例,您可能需要至少从Stack Exchange API调用这些内容来构建页面:

  • /用户/ {ID}
  • /用户/ {ID} /答案
  • /用户/ {ID} /声誉
  • /用户/ {ID} /标签
  • /用户/ {ID} /问题
  • ...等等

这种API的提供者是否允许您通过单个请求获取所有数据? 特别是如果涉及其他根类型,则说出由于某种原因,您还必须请求/ revision/{id}和/ tags来构建页面.

为了清楚起见,我不想知道是否可以在Web API中提供这样的功能 - 我想知道是否有标准或至少有文档记录的方法.

Tho*_*sen 5

我认为我们需要一些标准的方法来做到这一点,但在那之前,你可能是你自己的.

过去,当我想要跨多个资源进行交易时,我遇到了类似的挑战.我发明了新的资源,描述了我要做的更明确的行动(从帐户A中减去5,在帐户B中添加5成为与成员之间的交易).

也许通过使用另一个REST调用作为容器,可以在这里应用类似(但更通用)的方法;

POST /batchRequests { requests: [
    { method: 'POST', url: '/resource', payload: { ... } }
], transactional: false }
Run Code Online (Sandbox Code Playgroud)

然后返回包含结果的"BatchRequest"对象.这与Facebook的表现非常接近.


Ily*_*kov 3

我认为这可能违反 REST 原则,不是吗?即每个对象表示及其有效负载的唯一 URI。这不会让事情变得更糟吗?考虑到它不是 TI 计算器,而是一台能够并行 HTTP 请求的现代计算机,而不是单个请求的时间最长的计算机。

不要认为有标准,但这里有一个例子 - https://developers.facebook.com/docs/reference/api/batch/

  • 我同意这不再是一个问题,但最佳实践似乎仍然是减少 HTTP 请求的数量 (http://developer.yahoo.com/performance/rules.html#num_http)。这就是为什么我们结合 css 和 javascript 文件并创建图像精灵...感谢 Facebook 链接,我不知道这一点 (5认同)
  • Ilya,当然不是,我可能没说清楚。我想说的是,无论请求什么资源(REST 或其他方式),我们都建议尽可能减少 HTTP 请求的数量,以提高客户端性能。 (4认同)