【发布时间】:2013-04-12 19:54:24
【问题描述】:
假设我有一个名为 user_stats 的资源,其中包含用户拥有多少帖子、cmets、喜欢和关注者等信息。有没有一种 RESTful 方式只询问部分统计信息(即对于 user_stats/3,告诉我这个用户有多少帖子和 cmets,但不要告诉我这个用户有多少粉丝。)
我问的原因是一些统计属性可能是计算密集型的(是的,我在查询时生成它们)。因此,简单地不要求它可以减少工作量。
【问题讨论】:
标签: rest
假设我有一个名为 user_stats 的资源,其中包含用户拥有多少帖子、cmets、喜欢和关注者等信息。有没有一种 RESTful 方式只询问部分统计信息(即对于 user_stats/3,告诉我这个用户有多少帖子和 cmets,但不要告诉我这个用户有多少粉丝。)
我问的原因是一些统计属性可能是计算密集型的(是的,我在查询时生成它们)。因此,简单地不要求它可以减少工作量。
【问题讨论】:
标签: rest
useful 38 page free ebook 提供了有关设计 Web API 的最佳实践,您可能会发现它很有帮助,至少我是这样做的。
对于您的情况,说明:
在逗号分隔列表中添加可选字段
Google 的方法非常有效。
这里是如何使用我们的狗 API 获取我们需要的信息的方法 这种方法:
/dogs?fields=name,color,location简单易读;开发人员可以只选择信息 特定时间的应用需求;它减少了带宽问题,即 对移动应用程序很重要。部分选择语法还可用于包含相关资源,从而减少获取所需信息所需的请求数量。
也许这就是你要找的东西?
【讨论】:
至少有三个选项:
使用查询参数作为过滤器
例如user_stats?fields=posts,cmets
制作 user_stats 复合资源并为特定统计创建新资源
例如/user_stats 在 JSON 中
{
"blogs" : {
"count" : 10,
"link" : "/user_stats_blobs"
},
...
}
然后您可以获取全部统计信息 (GET /user_stats) 或仅获取一部分 (GET /user_stats_blobs)
创建过滤器表示;使用 POST 将过滤器表示作为请求的一部分发布
例如 要求 POST /user_stats/过滤器
{
"fields" : [ "blogs", ...]
}
响应正文仅包含请求/过滤的数据。
所有解决方案都是 RESTful。解决方案 1. 易于实施,但可扩展性和透明度有限。解决方案 2. 期望您创建新资源,在这种情况下这是开销(您只需要一个数字)。所以,我会推荐解决方案 3。因为实施起来并不难,易于扩展和透明。
【讨论】: