[英]REST web service: Error code should be 404 or 405?
我想問你在這種情況下我應該返回什么錯誤代碼:
假設我們有一個具有以下路徑的 Web 服務:
/customer-web/customers/{customerId}/subscription/{subscriptionId}
默認情況下,如果用戶沒有指定subscriptionId
,我們會得到405 Method not allowed
但如果我們省略customerId
,我們會得到404 Not found
那是對的嗎? 我們應該以某種方式統一錯誤代碼嗎?
謝謝!
[編輯] 還有一件事:如果我們假設,例如,只有 DELETE 方法......你的答案也會一樣嗎? 謝謝!
GET
但不允許POST
、 PUT
或DELETE
)。 當用戶未指定subscriptionId
,請求的資源將為/customer-web/customers/{customerId}/subscription/
。
該資源可能存在(並列出所有訂閱),也可能不存在(未綁定到該資源),在這種情況下404 Not found
將是合適的。
是的,這在邏輯上是不正確的。
假設您是客戶並且您有一些關於您自己的數據/信息。 它們保存在數據庫或其他數據存儲中。 現在,您將被視為該服務的用戶。 現在,該服務提供了一些功能,例如: 他們可以為您提供有關您喜歡的主題的最新消息。 現在您必須訂閱該特定功能才能收到通知。 但是要讓自己收到通知,服務器首先必須為您訂閱該事件/功能。 每個數據庫/數據存儲的表的行都有一個唯一的標識符,例如行號。 現在,他們必須搜索該 ID/行號(假設行號為您的用戶 ID)以檢查您是否是適用的用戶。
如果他們找到您,那么他們會將您的身份驗證者 ID 或用戶 ID 訂閱到事件表的subscribedUser
列,並將該事件 subscriptionId 添加到您行的subscribedEvents
列。 然后,如果您訂閱了,那么他們會向您發送有關您最喜歡的主題或其他內容的通知。
在上面的故事中,為用戶/客戶創建訂閱所必需的事情是:
subscribedUser
列)subscribedEvent
/客戶行的subscribedEvent
列) 現在,如果缺少上面的 ID,那么您將搜索什么? 可能你會有一個null
| undefined
如果您不提供其中任何一個並且行號或 UserID/EventId 不能為空,因為它們是數字並且也是唯一的。 很容易猜測,查詢操作將返回空[]
甚至null
。 而 null 是一個假值。 因此,服務器肯定會將其視為錯誤並將404
作為Not Found
響應發回。
但是有一點,如果customerId
用作參數:parameter
URI 的:parameter
,如果未傳遞,則 URL 將指向另一個端點,並將返回其他/不相關的響應。 如果該端點不存在,那么它將返回另一個 404 錯誤。 同樣適用於subscriptionId
。 以上標准僅適用於錯誤的customerId
或subscriptionId
。 現在,如果您不通過它們中的任何一個,那么地址將是錯誤的,如果該端點中不存在任何內容,則會發送404
,如果端點存在,則會發送其他響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.