2015-05-13 39 views
0

我想開發一個REST風格的API使用超文本作爲應用程序狀態主體的引擎。超媒體Restful API使用鏈接標題和範圍

我已經決定使用鏈接標題(RFC5988)進行所有'狀態轉換',將鏈接放置在那裏似乎很自然,並且不會在實現上使我的響應類型特定(例如XML/json/etc都只是工作)。

我現在在掙扎的是一組資源的分頁。在過去,我使用Range頭來控制它,所以客戶端可以發送「Range:MyObjects = 0-20」並返回前20個。看起來自然要包含一個「下一個」關係來表示接下來的20個項目(但可能不是),但我不確定如何去做。

許多例子都將範圍信息作爲URI的一部分。例如,這將是

Link: <http://test.com/myitems?start=20&end=40>;rel="next"

使用範圍頭我會做一些像下面?

Link: <http://test.com/myitems;rel="next";range="myitems=20-40"

的這裏關注的是,該鏈接的感覺非標準。客戶必須檢查範圍標題以獲取下一個項目。

另一件事是,我是否會將這一切都作爲一些帶外信息?不要顯示下一個/前一個範圍(這種類型取決於客戶端在做什麼),並期望客戶端在需要時只需要序列化它所需的內容?我可以使用「接受範圍,」鏈接提示在初始鏈接到集合,讓客戶知道它的「分頁」

例如像

OPTIONS http://test.com 
-> Link:"<http://test.com/myitems";rel="http://test.com/rels/businessconcept";accepts-ranges="myitem"" 

然後客戶會去,哦,它接受範圍,我只會拉下第一個X,然後根據需要去下一個範圍(這種感覺像是隱式狀態)。

我似乎可以弄清楚HATEOAS在這裏最好的精神是什麼。

回答

1

鏈接標題規範並不完全符合您的要求AFAIK。它沒有識別客戶提供的參數的概念。 rel文檔的鏈接可以並且應該指定如何應用您的範圍實現。

鏈接模板標題規範http://tools.ietf.org/html/draft-nottingham-link-template-00#page-3做了很多你想要的,但過期了。這指定了如何在標頭中使用http://tools.ietf.org/html/rfc6570樣式模板,並且如果您想使用我建議的方向標題。個人而言,儘管我同意讓頭部中的鏈接將您從身體的內容類型中摘錄出來,但我發現鏈接頭部很難發展,因爲您不能只在瀏覽器中粘貼一個網址並立即看到鏈接。

+0

我想問題是,它提供它在rel docs可以接受?它可能是,但如果我使用這種分頁方式'next'/'prev'永遠不會被使用。我已經使用http://tools.ietf.org/html/draft-nottingham-link-hint-00並可以添加範圍,但當然客戶必須從中建立一個請求。 (根據服務器提供的信息) 不確定哪一個是最好的HATEOAS,或者只是將範圍數據包括爲查詢參數。我真的很喜歡使用範圍/內容範圍的概念,因爲它感覺就像我在處理更多懶惰的評估流。 –