簡體   English   中英

REST Web 服務:錯誤代碼應該是 404 還是 405?

[英]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 方法......你的答案也會一樣嗎? 謝謝!

  • 請求的資源不可用時, 404 Not found是合適的
  • 405 Method not allowed當資源不支持 HTTP 方法時(例如,對於只讀資源,可能允許GET但不允許POSTPUTDELETE )。

當用戶未指定subscriptionId ,請求的資源將為/customer-web/customers/{customerId}/subscription/
該資源可能存在(並列出所有訂閱),也可能不存在(未綁定到該資源),在這種情況下404 Not found將是合適的

是的,這在邏輯上是不正確的。

假設您是客戶並且您有一些關於您自己的數據/信息。 它們保存在數據庫或其他數據存儲中。 現在,您將被視為該服務的用戶。 現在,該服務提供了一些功能,例如: 他們可以為您提供有關您喜歡的主題的最新消息。 現在您必須訂閱該特定功能才能收到通知。 但是要讓自己收到通知,服務器首先必須為您訂閱該事件/功能。 每個數據庫/數據存儲的表的行都有一個唯一的標識符,例如行號。 現在,他們必須搜索該 ID/行號(假設行號為您的用戶 ID)以檢查您是否是適用的用戶。

如果他們找到您,那么他們會將您的身份驗證者 ID 或用戶 ID 訂閱到事件表的subscribedUser列,並將該事件 subscriptionId 添加到您行的subscribedEvents列。 然后,如果您訂閱了,那么他們會向您發送有關您最喜歡的主題或其他內容的通知。

在上面的故事中,為用戶/客戶創建訂閱所必需的事情是:

  • CustomerID/UserID(這可以是該用戶/客戶的行索引號,它將被推送到該事件的subscribedUser列)
  • EventID(這可以是該事件的行索引號,它將用作subscriptionId ,它將被推送到該subscribedEvent /客戶行的subscribedEvent列)

現在,如果缺少上面的 ID,那么您將搜索什么? 可能你會有一個null | undefined如果您不提供其中任何一個並且行號或 UserID/EventId 不能為空,因為它們是數字並且也是唯一的。 很容易猜測,查詢操作將返回空[]甚至null 而 null 是一個假值。 因此,服務器肯定會將其視為錯誤並將404作為Not Found響應發回。

但是有一點,如果customerId用作參數:parameter URI 的:parameter ,如果未傳遞,則 URL 將指向另一個端點,並將返回其他/不相關的響應。 如果該端點不存在,那么它將返回另一個 404 錯誤。 同樣適用於subscriptionId 以上標准僅適用於錯誤的customerIdsubscriptionId 現在,如果您不通過它們中的任何一個,那么地址將是錯誤的,如果該端點中不存在任何內容,則會發送404 ,如果端點存在,則會發送其他響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM