1
我試圖設計一個REST API,其中:如何查找URI後面的資源類型?
- 客戶發出HTTP DELETE
/users/5
。 - 操作失敗,
HTTP 409 ("CONFLICT")
,Location
標頭指向必須首先刪除的依賴資源(例如,由用戶創建的錯誤報告)。我選擇不自動級聯刪除。
因爲HTTP 409 ("CONFLICT")
響應可以在多種類型的資源的時候,我需要爲客戶查找返回該資源的類型(爲保證系統理解什麼是被刪除的方式,而不是propgating刪除威利-nilly)。
什麼是適當的行動?客戶有沒有方法可以列舉URI的可用?客戶是否應該調用HTTP HEAD
WITH Accept: */*
並將結果Content-Type
與已知類型的列表進行比較?
這不完全正確。你引用的句子適用於他們正在討論的具體例子。如果你閱讀上面的內容(對於一般情況),他們寫道:「服務器應該生成一個有效載荷,其中包含足夠的信息以供用戶識別衝突的來源。」有效載荷「並不單指主體。它還包括標題。所以回顧一下,使用'Location'標題沒有任何問題。 這就是說,你是否建議我使用response body同時返回一個'Content-Type'和'URI'? – Gili 2014-09-24 06:57:22
@Gili位置標題(7.1.2)的文本提到201和3xx響應,但不包含其他任何響應。我沒有說這是錯的,只是狡猾。沒有IANA註冊的頭文件(http://www.iana.org/assignments/message-headers/message-headers.xhtml)允許位置內容類型。我不是自定義標題的粉絲,因爲中介可以剝離它們。如果你能負擔得起HEAD呼叫,我認爲這比有效載荷主體路線更正確,但是我的大部分客戶都不願意接聽額外的呼叫。 – 2014-09-24 14:08:14
如果你忽略Accept頭,是否允許'HEAD'返回'HTTP 303(「Multiple Choices」)?也許這比'Accept:*/*'更好,它將返回許多表示之一... – Gili 2014-09-24 22:46:08