2

我们现在正在设计我们的 RESTful API,我有一个关于如何公开分页信息的问题。

似乎一些著名的服务,如 Github 或 Firefox Market Place,在其 API 中有如下内容:

{
"meta": {
    "limit": 3,
    "next": "/api/v1/apps/category/?limit=3&offset=6",
    "offset": 3,
    "previous": "/api/v1/apps/category/?limit=3&offset=0",
    "total_count": 16
    }
}

我的问题是:

为什么服务器要在响应中提供完整的下一个/上一个 url?

在我看来,客户正在提出第一个请求。所以它知道它曾经调用过哪些参数(偏移量/限制/api版本)。客户端很容易弄清楚下一个/上一个要调用的 url 是什么。为什么要费心计算多余的 url 并将其提供给客户端?

4

1 回答 1

3

它是RESTful的!这是HATEOAS 或超媒体作为应用程序状态引擎的具体部分。

除了应用程序的简单固定入口点之外,客户端不假定任何特定操作可用于任何特定资源,而不是先前从服务器接收的表示中描述的那些。

和:

[HATEOAS] 是 REST 应用程序架构的一个约束,将它与大多数其他网络应用程序架构区别开来。其原理是客户端完全通过应用服务器动态提供的超媒体与网络应用进行交互。除了对超媒体的一般理解之外,REST 客户端不需要有关如何与任何特定应用程序或服务器交互的先验知识。
...
REST 客户端通过简单的固定 URL 进入 REST 应用程序。客户端可能采取的所有未来动作都在从服务器返回的资源表示中发现。

(重点补充)

在我看来,客户正在提出第一个请求。所以它知道它曾经调用过哪些参数(偏移量/限制/api版本)。

的,客户端发出第一个请求,但这并不意味着它知道有关 URL 发现、分页、限制/偏移参数等的任何信息。

于 2013-06-25T02:27:18.023 回答