2013-06-25 67 views
1

我們現在正在設計我們的RESTful API,並對如何公開分頁信息提出了一個問題。爲什麼在API響應中提供分頁信息?

似乎一些著名的服務,如Github上或Firefox市場在位,其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 
    } 
} 

我的問題是:

爲什麼要在服務器給出完整的一個/上一個網址在迴應中?

在我看來,客戶端正在提出第一個請求。所以它知道它用來調用的參數(偏移/限制/ api版本)。客戶端很容易找出下一個/上一個要調用的URL。爲什麼要計算冗餘網址並將其提供給客戶?

+0

使用分頁保護您免受用戶回吐所有的資源都有大量的查詢。例如,將返回的項目數量限制爲20.您可以傳遞頁面,以方便用戶。 – Matt

+2

@Matt我認爲你已經錯過了OP所問的確切問題。這是「爲什麼當客戶明確知道如何生成它們時,在響應中提供URL?」而不是「爲什麼要使用分頁?」 –

+0

@MattBall感謝您爲我澄清。你所說的正是我要打字的內容。 – Lenciel

回答

3

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

特定組成部分除了簡單的固定入口點的應用,客戶不承擔任何特定措施可用於超出先前從服務器接收陳述中描述的任何特定的資源。

和:

[HATEOAS]是從其他大多數網絡應用架構區分它的其餘部分應用架構的一個制約因素。其原理是客戶端完全通過應用服務器動態提供的超媒體與網絡應用進行交互。 除了對超媒體的一般理解之外,REST客戶端不需要關於如何與任何特定應用程序或服務器進行交互的預先知識。
...
REST客戶端通過簡單的固定URL輸入REST應用程序。 客戶端可能採取的所有將來的操作都是在從服務器返回的資源表示中發現的。

(強調)

這似乎對我來說,客戶端做出的第一個請求。所以它知道它用來調用的參數(偏移/限制/ api版本)。

是,客戶端發出的第一個請求,但這並不意味着它知道的網址發現,分頁,限制/偏移參數等任何

+0

謝謝你的回答,馬特。但我不確定爲什麼「這並不意味着它知道任何有關URL發現,分頁,限制/偏移參數等的內容。「由於客戶端啓動了請求,它知道它正在請求哪個頁面(偏移量),頁面上有多少項目(限制)以及它正在調用哪個api版本。即使客戶端在請求之後也不會持久這些信息,服務器可能只是迴應響應中的「偏移量」,「極限」而不是完整的uri。 – Lenciel

+0

我對爲什麼在響應中給出完整URI的猜測是,也許API設計人員是Atom協議的粉絲,因此RFC5005 | http://以www.ietf.org/rfc/rfc5005.txt爲起點,但RFC5005不同:它在服務器響應中具有first/next/pre/last,所以分頁對客戶端是絕對透明的 – Lenciel

+0

_「由於客戶端啓動請求,它知道它正在請求哪個頁面(偏移量),頁面上有多少項目(限制)「_ no,這是不正確的。我的答案中的第一個引號直接反駁了這個問題。當它請求一個列表o時,必然知道它收到了一個分頁響應f東西。 –

相關問題