【问题标题】:How to return a resource count in a REST API?如何在 REST API 中返回资源计数?
【发布时间】:2013-01-07 09:54:24
【问题描述】:

假设我有一个 REST API,它具有检索用户和用户照片的基本方法。例如:

// Get a user:
GET /user/123

// Get the photos of a user:
GET /user/123/photos

// Get a photo:
GET /photo/789

这很简单,但是现在我还需要一种方法来检索特定用户的照片数量。我不想检索所有照片,因为这会减慢一切并且没有必要。在 REST API 中执行此操作的最佳方法是什么?

我考虑过实现类似GET /user/123/photo_count 的东西,但是“photo_count”不是资源,所以这似乎不对。

如何在 REST API 中正确呈现此类信息?

【问题讨论】:

  • 照片计数不能是 GET /user/123 返回的用户的属性吗?
  • @Ameen,这就是我最终这样做的方式,这是一个干净的解决方案,将计数作为属性是有意义的。随意添加您的评论作为答案,我会接受。

标签: api rest resources get count


【解决方案1】:
// Get the photos of a user: 
GET /user/123/photos

这并不一定要真正返回照片,它可以只返回一个链接列表。

它甚至可以是前 n 个链接的部分列表,其中包含有关总数的信息,以及用于获取下一个/上一个批次的链接。

【讨论】:

  • 它很可能会返回一个 ID 列表,但它可能是数千个 ID,这不是真正可扩展的。我也想避免返回任何不需要的东西,因为这是针对移动网络应用程序的。
  • 许多 API 执行 @Szocske 所建议的类似
【解决方案2】:

您可以做一些“自定义”的操作,例如将计数作为响应标头返回。然后为了获得计数,您将发出一个HEAD,它应该返回没有响应正文的标头(即实际上不加载照片)。

GET /user/123/photos
==>
Headers:
X-Count 23
Body:
<photos>
<photo id="1">...</photo>
<photo id="2">...</photo>
...
</photos>

HEAD  /user/123/photos
==>
Headers:
X-Count 23
Body:
none

【讨论】:

  • 谢谢,这是一个有趣的技术。我想知道这是否是在标头中返回此类元数据的常见模式?有没有潜在的缺点?
  • 我能想到的唯一缺点是这不是“标准”REST,并且客户端需要了解该功能(通过阅读一些文档)才能使用它。否则,这应该工作得很好。在 HTTP 中还有一种标准的分页方式,使用特殊的请求标头和 206 响应代码。您也许可以使用它来实现类似的目标:benramsey.com/blog/2008/05/…
【解决方案3】:

与原始帖子的评论一样,您可以将照片计数作为用户“对象”的属性返回。 GET /user/123 调用将简单地返回一个包含图片数量作为属性的对象/json/xml。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2018-06-28
    相关资源
    最近更新 更多