假设我有一个名为user_stats的资源,其中包含用户拥有的帖子,评论,评论和关注者的数量。是否有RESTful方式只询问部分统计信息(即对于user_stats / 3,告诉我这个用户有多少帖子和评论,但不要告诉我这个用户有多少粉丝。)
我问的原因是一些统计属性可能是计算密集型的(是的,我在查询时生成它们)。所以根本不要求它可以减少工作量。
答案 0 :(得分:7)
有一个非常useful 38 page free ebook有关于设计Web API的最佳实践,您可能会觉得它很有帮助,至少我做过。
对于您的情况,请说明:
在逗号分隔的列表中添加可选字段
Google方法效果非常好。
以下是如何使用我们的狗API获取所需信息 这种方法:
/dogs?fields=name,color,location
阅读简单;开发人员可以只选择信息 app在特定时间需要;它减少了带宽问题,这是 对移动应用很重要。部分选择语法还可用于包括相关资源,减少获取所需信息所需的请求数量。
也许这就是你要找的东西?
答案 1 :(得分:3)
至少有三个选项:
使用查询参数作为过滤器
e.g。 user_stats?字段=信息,评论
制作user_stats复合资源并为特定统计信息
创建新资源e.g。 JSON中的/ user_stats
{
"blogs" : {
"count" : 10,
"link" : "/user_stats_blobs"
},
...
}
然后你可以得到整个统计数据(GET / user_stats)或只是一块(GET / user_stats_blobs)
创建过滤器表示;使用POST将过滤器表示作为请求的一部分发布
e.g。 请求 POST / user_stats / filter
{
"fields" : [ "blogs", ...]
}
响应正文仅包含请求/过滤的数据。
所有解决方案都是RESTful。解决方案1.易于实现,但具有有限的可扩展性和透明性。解决方案2.期望您创建在这种情况下开销的新资源(您只需要一个数字)。所以,我建议使用解决方案3.因为它不是那么难以实现,易于扩展和透明。