我試過Google搜索和搜索無處不在,但無法找到關於此主題的權威性權威。雖然是真正的REST原則,我應該如何設計的HTTP接口:REST風格的數據結構模式
有序列表(獲取,添加,插入位置,重新排序,刪除)
一套(獲取,添加,刪除)
哈希表(獲取,添加,刪除)
注意:這些數據結構都包含已知的IDS
我試過Google搜索和搜索無處不在,但無法找到關於此主題的權威性權威。雖然是真正的REST原則,我應該如何設計的HTTP接口:REST風格的數據結構模式
有序列表(獲取,添加,插入位置,重新排序,刪除)
一套(獲取,添加,刪除)
哈希表(獲取,添加,刪除)
注意:這些數據結構都包含已知的IDS
這就是我會做一個有序列表和哈希表中現有資源的引用。我猜的方法將是一個集和列表相同:
獲取項目123:
GET /list/123
追加的項目清單:
POST /list/
將新項目插入位置5:
POST /list/?position=5
在第3位
DELETE /list/123
刪除項目:
DELETE /list/?position=3
當然,你的API應該更新的指標
移動項目123位置3:
PUT /list/123?position=3
刪除項目123插入和刪除時的所有元素。
獲取項目 「somekey」:
GET /hashtable/somekey
添加項目 「somekey」:
POST /hashtable/somekey
刪除項目 「somekey」:
DELETE /hashtable/somekey
@ dadads
你不能直接定義這樣的接口。
有序列表(獲取,添加,插入位置,重新排序,刪除)
通過排除「插入位置」和「重新安排」可以完美實現「搞定」,「添加」和「刪除」,例如:
這是一個非常粗略的例子,雖然它概述了一些想法。爲了實現「重新排序」和「插入到位」,您需要實現自己的動作語義,您可以在資源表示中包含這些動作語義,並讓客戶知道如何執行這些操作。作爲參考,您可以看到這個JSON PATCH規範提案:https://tools.ietf.org/html/rfc6902試圖描述這樣的操作。
沒有必要使用已經存在的媒體格式,你可以在你自己的名字空間下定義你自己的名字,例如:application/vnd.your-company.format-name + json,它描述了這些功能,客戶端。
您應該將傳輸機制與底層應用程序分離。我會考慮正確地設計應用程序,然後弄清楚如何通過HTTP訪問它。通過這種方式,您可以輕鬆添加或更改傳輸機制(SOAP,SCA等),而不會影響底層應用程序。
正確設計了應用程序後,請考慮通過類似適配器或訪問者模式的方式從HTTP請求中訪問它。
這是我的重新排序的想法。
有一種稱爲PATCH的HTTP方法,用於更新資源的片段。給你的資源稱爲index
新的屬性,然後進行補丁方法的調用
PATCH /collection
[
{
"id: "original index 0"
"index": 1
}
{
"id: "original index 1"
"index": 0
}
]
然後你的服務器後端需要弄清楚如何原子做到這一點。但接口方面,我認爲這是保持對RESTful的最佳方式。
或者,有一個更好的解決方案,但它可能不適用於每個人的情況。由於訂購總是取決於某種標準,它甚至可以像插入訂單一樣簡單。讓你的收集URL支持一個orderBy
查詢字符串,並讓這個orderBy
指示如何排序結果。然後,在重新排序來自客戶端的調用期間,只需更新用於排序條件的資源屬性即可。
我來到這個問題主要是尋找一個RESTful的方式來重新排序。我真的不喜歡任何答案,所以這裏是我認爲最RESTful的。
對於重新排序,你可以下訂單的資源:
/list/order
然後,你可以做它的正常操作(這些例子假定5個項目,目前它的列表):
"items":" [
{
"id": "A",
"name": "Monkey"
},
{
"id": "B",
"name": "Cow"
},
{
"id": "C",
"name": "Horse"
},
{
"id": "D",
"name": "Turkey"
},
{
"id": "E",
"name": "Tasmanian Devil"
},
]
請注意,「訂單」不包含在資源響應中。這不是必需的 - 訂單由項目的響應順序隱式指定。
GET /list/order
返回正確的順序項ID列表
['A','B','C','D','E']
POST /list/order
與有效載荷['D','B','C','A','E']
GET /list/order
返回正確的順序
['D','B','C','A','E']
也明顯當你在/list
做GET
你將返回的項目列表中按正確的順序項ID的列表。
GET /list
返回的項目列表中正確的順序
"items":" [
{
"id": "D",
"name": "Turkey"
},
{
"id": "B",
"name": "Cow"
},
{
"id": "C",
"name": "Horse"
},
{
"id": "A",
"name": "Monkey"
},
{
"id": "E",
"name": "Tasmanian Devil"
},
]
1年後:事實證明,這樣的哲學深思對你的應用程序如何很好的解決問題的影響微乎其微。真正的答案似乎是,只要您不違反任何規格/要求並導致任何問題,您選擇的並不重要。 – dadads