【问题标题】:RESTful way to ask for subset of a resource请求资源子集的 RESTful 方式
【发布时间】:2013-04-12 19:54:24
【问题描述】:

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

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

【问题讨论】:

    标签: rest


    【解决方案1】:

    useful 38 page free ebook 提供了有关设计 Web API 的最佳实践,您可能会发现它很有帮助,至少我是这样做的。

    对于您的情况,说明:

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

    Google 的方法非常有效。

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

    /dogs?fields=name,color,location

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

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

    【讨论】:

    【解决方案2】:

    至少有三个选项:

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

      例如user_stats?fields=posts,cmets

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

      例如/user_stats 在 JSON 中

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

      然后您可以获取全部统计信息 (GET /user_stats) 或仅获取一部分 (GET /user_stats_blobs)

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

      例如 要求 POST /user_stats/过滤器

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多