許多此處有一個友好的開發人員(有人說是宗教)有關從的RESTful API一個GET請求是否應該返回所請求的資源的ID討論。讓我們假設以下GET請求:RESTful GET響應應該返回資源的ID嗎?
http://my.api.com/rest/users/23
這個當前返回:
{"name": "Jim", "age": 40, "favoriteColor": "blue"}
注意, 「ID」 是從結果集中遺漏。
基本上有4個陣營正在與這個問題作鬥爭。
CAMP#1:當呼叫者發出GET請求時,他們已經知道該ID。因此,結果集應該包含該ID的而不是。如果調用者需要此數據來啓用UI編輯,則調用者需要通過ID 23,可能會手動將成員{「id」:23}添加到JSON。
1號營地的人們也認爲結果集中ID的存在會表明這個值可以被修改,當然這不能。
CAMP#2:沒有ID,JSON結果集不能用於UI形式的編輯/更新操作。相反,AJAX回調機制需要負責傳遞ID字段並將其手動添加到結果集中。這似乎klunky和容易出錯。這些用戶界面人士認爲結果集「感覺」就像缺少應該存在的數據,即ID。
CAMP#3:這些人關心的一致性。如果我們有一個由API返回的用戶對象的集合,這些對象必須包含這個ID。因此,爲了保持一致性,GET的單例版本還應該包含該ID。
CAMP#4:這些人建議用戶的GET請求可以返回包含ID的HyperMedia或SelfLinks形式的元數據。
這不是一個深奧的「誰是對的?」論點,無論。我們採取的方法將決定我們的API的形狀,並影響幾個開發人員在新的幾周內的工作負載。
這只是個人意見,但我同意第2和第3陣營。我認爲該表示應包含所有可用數據,包括ID。特別是當它是一個自然的ID。這是一個非常有趣的問題,但我懷疑你會找到一個簡單的答案。 – toniedzwiedz
從客戶的角度來看,GET *中使用的URI是ID。我會爲Camp 4投票,假設自我鏈接中使用的「ID」是整個URI,而不僅僅是最後的部分。 –
4號營的人會放心,看到他們並不孤單。並且要確認,如果他們包含該ID,它將被嵌入完整的URI中。這意味着需要解析URI來提取ID,但對於Camp 2人員來說,至少他們不必手動輸入JSON負載。另一方面,Camp 1的追隨者認爲這樣的URI只是REST Level 3的部分實現,所以出於這個原因他們不喜歡嵌入SelfLinks。 –