5

假设我有一个名为 user_stats 的资源,其中包含用户拥有多少帖子、评论、喜欢和关注者等信息。是否有一种 RESTful 方式只询问部分统计信息(即对于 user_stats/3,告诉我这个用户有多少帖子和评论,但不要告诉我这个用户有多少粉丝。)

我问的原因是一些统计属性可能是计算密集型的(是的,我在查询时生成它们)。因此,简单地不要求它可以减少工作量。

4

2 回答 2

10

有一本非常有用的 38 页免费电子书,其中包含有关设计 Web API 的最佳实践,您可能会发现它很有帮助,至少我做到了。

对于您的情况,说明:

在逗号分隔的列表中添加可选字段

谷歌的方法非常有效。

以下是如何使用这种方法从我们的狗 API 中获取我们需要的信息:

/dogs?fields=name,color,location

读起来很简单;开发人员可以只选择应用程序在给定时间所需的信息;它减少了带宽问题,这对于移动应用程序很重要。部分选择语法还可用于包含相关资源,从而减少获取所需信息所需的请求数量。

也许这就是你要找的东西?

于 2013-04-12T20:52:55.120 回答
3

至少有三个选项:

  1. 使用查询参数作为过滤器

    例如 user_stats?fields=posts,comments

  2. 制作 user_stats 复合资源并为特定统计创建新资源

    例如 JSON 中的 /user_stats

    {
      "blogs" : {
          "count" : 10,
          "link" : "/user_stats_blobs"
       },
       ...
    } 
    

    然后您可以获得整个统计信息 (GET /user_stats) 或只是一个 (GET /user_stats_blobs)

  3. 创建过滤器表示;使用 POST 将过滤器表示作为请求的一部分发布

    例如请求 POST /user_stats/filter

     {
         "fields" : [ "blogs", ...]
     }
    

    响应正文仅包含请求/过滤的数据。

所有解决方案都是 RESTful。解决方案 1. 易于实施,但可扩展性和透明度有限。解决方案 2. 期望您创建新资源,在这种情况下这是开销(您只需要一个数字)。所以,我会推荐解决方案 3。因为实施起来并不难,易于扩展和透明。

于 2013-04-12T20:53:28.913 回答