我正在設計一個RESTful Web服務,並試圖正確使用超媒體來建立資源之間的關係。對於某些資源,客戶端需要能夠將關係分配給另一個資源,但是在我看來,要求客戶端生成超鏈接和POST/PUT/PATCH /無論這個超鏈接到資源中有什麼缺點(更復雜對於客戶端,安全和負載平衡問題等)。我在想讓客戶端發送一個簡單的ID並讓服務器生成URL會更好。RESTful更新資源超鏈接
以下是一些爲鋼琴租賃API設計的資源,用以展示我的想法。
GET http://company.com:9999/customers/42
{
"id" : 42,
"name" : "George P. Burdell",
"phone" : "555-555-5555",
"piano" : { "href" : "http://company.com:9999/pianos/101"}
}
GET http://company.com:9999/pianos/101
{
"id" : 101,
"make" : "Steinway",
"model" : "Model D"
}
假設客戶想租一架不同的鋼琴。
客戶端發送一個部分更新,如:
PATCH http://company.com:9999/customers/42
{ "piano" : 202}
服務器會再生成正確的URL到新的鋼琴資源並相應更新:
GET http://company.com:9999/customers/42
{
"id" : ...,
"name" : ...,
"phone" : ...,
"piano" : { "href" : "http://company.com:9999/pianos/202"}
}
編輯: 作爲我看到它,客戶直接更新超鏈接可能會有問題。這是一個RESTfully好的解決方案,還是有更好的解決方案?這甚至不是問題嗎?此外,以某種方式更新資源超鏈接的客戶的真實世界示例將非常棒 - 我還沒有找到任何示例。
我喜歡這個主意,它是乾淨和優雅,爲所有實體所在內的,只要工作相同的REST webservice ...與所有API(不僅僅是REST風格的)一樣,一個合適的文檔是強制性的......我不是主打的:什麼是你的問題/目標? – Yahia 2012-03-14 16:44:20
謝謝,好點。直接更新超鏈接的客戶似乎有問題,我正在尋找一個乾淨的解決方案或有人向我解釋爲什麼這不是問題。當我開始輸入問題時,上面的解決方案對我來說就是我決定拋出去徵求意見。 – HolySamosa 2012-03-14 16:59:19