【问题标题】:What if RESTful Web API default GET would return way too many results?如果 RESTful Web API 默认 GET 会返回太多结果怎么办?
【发布时间】:2013-09-26 06:32:45
【问题描述】:

环境:ASP.NET MVC 4 Web API

鉴于 GET 的 RESTful 标准是:

@987654321@ 返回所有实体的集合 @987654322@{id} 返回 ID 为 {id}

的实体

...如果有这么多“实体”,以至于第一次调用会返回大量的结果数据,该怎么办?

我可以完全禁止该调用并返回 HTTP 500 或其他内容,但我宁愿遵守标准并实现某种范围选项,尽管它可能是任意的。

我一直在寻找允许等同于分页的 HTTP 标头并遇到 Accept-Ranges,但找不到适用的示例(如果一开始就正确的话)。我在正确的轨道上吗?是否有任何资源可以提供帮助?

【问题讨论】:

    标签: rest get


    【解决方案1】:

    Accept-Ranges 是一个 response 标头,因此它不能帮助您将分页请求从客户端发送到服务器。该规范允许您为此标头返回任何值(尽管唯一的标准化值是bytes),因此您可以使用Accept-Ranges 作为服务器通知客户端您的API 支持分页的一种方式,但TBH 可能不是没那么有用。

    匹配的 request 标头是 Range。此标头的值是ranges-specifier,但不幸的是,根据规范,唯一有效的值是byte-ranges-specifier,例如The first 500 bytes (byte offsets 0-499, inclusive): bytes=0-499,这对于我们想要的类型分页没有用处。

    由于没有标准,您只需编写自己的请求标头或查询参数即可进行分页。以下是我们为我正在开发的 RESTful API 所做的工作:

    GET /users/?offset=10&limit=50

    {
        "users": [...],
        "offset": 10,
        "limit": 50,
        "total": 10000
    }
    

    【讨论】:

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