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