2016-05-30 77 views
1

使用下列API:帖子條件檢查HTTP狀態

  1. 如果缺少:

    feed?url=XXX 
    

    驗證的參數url進行400 Bad Request

  2. 如果空/無效網址:422 Unprocessable Entity
  3. 如果URL沒有指向有效的RSS/Atom feed:422 ??

3.應該返回什麼狀態錯誤?

不同於驗證2.,就不可能檢查3.沒有獲取數據並試圖解析,所以原始用戶數據不能直接驗證。

我在想422 Unprocessable Entity,因爲它即使不是直接的數據(url),但該數據的引用(url的內容)相關的驗證。

您的意見是?

回答

0

422對於#2和#3是不合適的。它與理解Content-Type標題的服務器相關,但HTTP請求正文中的實際內容無法解釋。

我想你可以在這裏說明502 Bad Gateway是合適的。這有點奇怪,因爲問題是用戶錯誤(傳入的url參數,所以4xx代碼),但它也是發生在服務器上,特別是原始服務器(這是有意義的5xx,特別是502 )。

但是,如果在這種情況下,你嚴格考慮這是一個客戶端造成的問題(在url中輸入錯誤)而不是服務器端,那麼我會說沒有足夠的具體錯誤代碼,你應該可能只是堅持400所有人。

也許..也許你可以讓409可能在這裏工作的論點。在以下情況下可以使用409:

  1. HTTP請求存在沒有什麼特別的錯誤。
  2. 但是另一個資源的狀態導致請求失敗。

通常情況下,'其他資源'存在於同一個系統中,但我不明白爲什麼外部Atom提要也不能被視爲衝突。

因爲如果外部服務器上的Atom訂閱源是'固定的',那麼用戶所做的原始HTTP請求現在將工作。所以一個409種在這裏是適當的。

+0

關於'422'我同意查詢參數不是* entity *的一部分,因此可能很難返回*不可處理的實體*。但我真的不認爲'409衝突'是一個更好的選擇(從我在這裏閱讀https://tools.ietf.org/html/rfc7231#page-60)。 – Kakawait

+0

409以及我如何使用它的經驗源於它在WebDAV(HTTP擴展)中的使用。它應用的方式意味着幾乎是普遍的「請求沒有錯,如果在不同的資源狀態發生變化後再次發送,它可能會成功」。這也是我如何從HTTP擴展中解釋409,即使它在那裏更加普遍和神祕。 – Evert