2017-08-31 62 views
0

我們有API返回客戶詳細信息,即/ api/customers/{customerid} /。我們有以下情形:REST API:我們何時應該使用不同於流行的HTTP狀態碼?

  1. 如果傳遞客戶ID是非整數或高於最高(客戶ID)在我們的數據庫< = 0或更高,我們發回錯誤請求,即使用HTTP狀態碼400
  2. 如果請求這個API來自我們封鎖的任何IP,我們發回HTTP狀態碼403(禁止)。
  3. 如果客戶ID被刪除:我們發回404

我就在想,爲什麼我們真的需要考慮並有所有這些不同的HTTP狀態代碼?我們所需要的只是在客戶端上顯示一條適當的消息,我們可以通過返回所有以上情況的HTTP狀態代碼400輕鬆完成,並且對於所有以上三種情況,都只有不同的字符串消息。

這對我來說很合適,但我想知道我們什麼時候會不可避免地需要其他200,400和500這些特殊狀態代碼?

+1

當我使用REST API時,我基於狀態碼做了很多工作,所以如果我得到了404,我會知道沒有客戶並繼續前進,但如果我得到403,我會看看爲什麼我無法訪問該用戶。一切標準400將使問題更難解決。 – Loaf

+0

但android/ios/web客戶端只需要在這種情況下顯示消息,爲什麼我們會返回這些特殊的狀態碼? – maverick

+1

@Loaf True。我無法計算所有時間'418'節省了我幾個小時的故障排除時間;) – jonahe

回答

0

什麼時候我們不可避免地需要其他200,400和500這些特殊狀態碼?

使用更專門的碼的一點是,它允許通用客戶端(如網絡瀏覽器)和中間部件(高速緩存)智能地工作;他們可以這樣做,因爲狀態代碼(如標題字段中的元數據)具有標準化的定義。

401 Unauthorized就是一個簡單的例子 - 你的服務器告訴瀏覽器需要一些識別證書,瀏覽器知道它可以用用戶提供的識別信息重複請求。

這不是錯誤到處使用200/400/500;這樣做錯過了讓中介機構更充分參與信息交流的機會。

這是類似於使用POST爲每個請求:您可以做到這一點,但在這樣做,所以你放棄了safe/idempotent語義;如果沒有這些提示,你就會限制中間組件在溝通走向歡樂之路時能夠提供多少幫助。

相關問題