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