RESTful方式来询问资源的子集

时间:2013-04-12 19:54:25

标签: api rest

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

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

2 个答案:

答案 0 :(得分:7)

有一个非常useful 38 page free ebook有关于设计Web API的最佳实践,您可能会觉得它很有帮助,至少我做过。

对于您的情况,请说明:

  

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

     

Google方法效果非常好。

     

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

     

/dogs?fields=name,color,location

     

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

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

答案 1 :(得分:3)

至少有三个选项:

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

    e.g。 user_stats?字段=信息,评论

  2. 制作user_stats复合资源并为特定统计信息

    创建新资源

    e.g。 JSON中的/ user_stats

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

    然后你可以得到整个统计数据(GET / user_stats)或只是一块(GET / user_stats_blobs)

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

    e.g。  请求      POST / user_stats / filter

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

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

  4. 所有解决方案都是RESTful。解决方案1.易于实现,但具有有限的可扩展性和透明性。解决方案2.期望您创建在这种情况下开销的新资源(您只需要一个数字)。所以,我建议使用解决方案3.因为它不是那么难以实现,易于扩展和透明。