我被要求設計和實現一個RESTful API,並一直在研究最佳實踐,但到目前爲止只有關於資源表示的概念。我發現的大多數可用示例似乎都將重點放在使用一系列GET獲取連接結構的API客戶端上。帶有鏈接的REST資源表示,與PUT和GET兼容
我已經看過:
http://www.restapitutorial.com/media/RESTful_Best_Practices-v1_1.pdf
http://www.youtube.com/watch?v=HW9wWZHWhnI
除其他在線資源(我限制在2個鏈接恕無法一一列舉)。它們都很棒,但並沒有真正解決我的設計問題。
大多數最佳實踐文檔建議兩件事情對我來說在衝突看咯:
1)REST服務應該代表的資源之間的鏈接數據關係
2)從「PUT」請求客戶端應該是完整的表示形式,與服務器上的表示形式相同。
從我的觀點來看,麻煩在於,典型資源中的鏈接以及其他一些屬性是隻讀的,因此無法更新。服務器在裝置上期望它們是原樣的,並且如果它認爲客戶端正在嘗試更新它們,則返回一個錯誤。實際上,當我查看以JSON表示的典型資源時,其中大部分是邏輯上不能/不應該被替換的數據。例如。
{
"link": { "rel":"self", "href":"http://example/project/12345" },
"team": {
"link": { "rel":"self", "href":"http://example/project/12345/team" },
"title": "The project team"
},
"title": "The Big Project"
}
這裏充其量只有兩個標題文本將寫入到這個資源的客戶機(團隊成員可能是通過團隊鏈接可變)。
所以我應該要求PUT完全按原樣包含所有「鏈接」元素,它們純粹是邏輯的和只讀的(請注意,在示例中,團隊無法重新鏈接,因爲資源定義它作爲項目團隊 - 在這種情況下可以改變,但對於許多具有更嚴格集裝箱的資源類型,這不適用)?
是否存在標準模式或反模式來表示REST中具有多個鏈接的資源?我沒有被要求提供特定的REST變體,比如HATEOAS,儘管我傾向於在可能的情況下以理論上的「正確性」爲目標。換句話說,如果「官方」REST會希望客戶把整個資源,鏈接和所有內容放在一起,那麼這可能是我會做的。
真的很感激一些支持GET和PUT並因此必須處理這個問題的現實世界複雜的非葉REST資源的例子。當我搜索時,我得到很多意見,並且很多例子顯示了GET如何很好地工作。 。 。但到目前爲止,我還沒有看到一個記錄良好的例子,顯示PUT除了一個簡單的葉資源(即不包含任何鏈接,除了可能是自引用外)。
謝謝。我的鉛筆設計包含一個「屬性」部分,它與「身體」成員的想法非常相似。我也在考慮將這些事情分解到他們自己的葉子資源中,這會爲我的設計增加5或6種資源類型(不好),但是相當簡化PUT方法(好) –