为什么在API响应中提供分页信息?

时间:2013-06-25 02:24:45

标签: api restful-url api-design

我们现在正在设计我们的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
    }
}

我的问题是:

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

在我看来,客户端正在提出第一个请求。所以它知道它用来调用什么参数(offset / limit / api版本)。客户端很容易弄清楚下一个/上一个要调用的URL是什么。为什么要费心计算冗余网址并将其交给客户?

1 个答案:

答案 0 :(得分:3)

这是RESTful!这是HATEOAS, or Hypermedia as the Engine of Application State.

的具体内容
  

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

  

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

(强调补充)

  

在我看来,客户端正在提出第一个请求。所以它知道它用来调用什么参数(offset / limit / api版本)。

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