2017-04-12 30 views
1

我養值錯誤在我的API,因爲一個特定函數的輸入參數無效像下面當Api引發ValueError時,http狀態碼是什麼?

  1. 密碼不匹配
  2. 用戶數據庫中不存在或值爲負

客戶端根據API規範提供了有效的參數,所以我認爲客戶端錯誤不是這種情況(400系列代碼)。

所以,我是否有返回狀態代碼爲200,因爲該請求被完全處理,或者應該有一個HTTP狀態代碼這一點。

回答

1

您應該發送另一個狀態碼。

處理請求的另一個狀態不是200的一個很好的例子是重定向3xx。通過POST請求提交表單後,建議服務器給出307 Temporary Redirect。但是,該請求已完全處理,甚至成功。

就你而言,發生了一些事情(引發了異常)。通過發送適當的狀態讓客戶知道。我會推薦403 Forbidden401 Unauthorized

+0

如果特定客戶(客戶端)不具有特定的記錄(新用戶),那麼它會給值誤差,但這並不401或403 –

+0

在我看來,'401和Unauthorized'配合下來。但是不止一個狀態碼是有效的,並且沒有確切的確定答案。 – Dunatotatos

2

由於有各種invalid類型,您應該使用最適當的HTTP狀態代碼爲每個不同的情況,逐案。

對於Password doesn't match,我覺得403 Forbidden是最好的選擇。

User doesn't exist in db204 No Content是最好的一個。

對於value is negative,這取決於爲什麼值是負值。

+0

'204沒有內容'是不是一個好主意,如果一些內容是關注。根據RFC2616:'204響應不能包含消息體,因此總是由頭字段後面的第一個空行終止。' – Dunatotatos

+0

對,只有當整個資源不可用時,'204'是選擇。 – shaochuancs

1

您可能應該從4xx範圍內返回一些內容,以表明請求的某些問題阻止了請求的執行。 400(錯誤請求)是您用於失敗輸入驗證的內容。對於身份驗證或密碼問題,401(未授權)是最合適的。如果用戶通過身份驗證但不被允許執行特定操作,請使用403(禁止)。如果問題與不存在的對象(如用戶)一樣,則可以返回404(未找到)。

2xx響應代碼用於指示請求已被接收和處理成功,3xx用於告訴用戶沒有任何事情發生,但有一些替代請求可以執行(例如301和303的重定向,或不修改304)。 5xx保留用於通知服務器端的各種問題,以防止請求被執行。

Wikipedia具有共同的HTTP響應代碼及其含義的很好的概述。

相關問題