簡體   English   中英

了解REST響應和HTTP狀態代碼

[英]understanding REST Response and HTTP status code

我想知道我應該如何在我的REST API中響應。

有效示例:

http://blah.com/api/v1/dosomething/123

以上是有效的請求,目前我的HTTP狀態為200,帶有JSON響應

{
    "dosomething": {
        "status": "OK",
        "results": "123"
    }
}

現在我的問題是,如果傳遞的參數無效(我希望是一串整數),我是否返回200的HTTP響應並將錯誤狀態傳遞回JSON響應中,還是應該傳遞類似HTTP的信息? 400響應(錯誤請求),並在JSON響應中列出請求的錯誤/問題?

錯誤示例:

http://blah.com/api/v1/dosomething/123a

JSON響應:

{
    "dosomething": {
        "status": "ERROR",
        "errors": [
            "Value passed: |123a| must be a integer."
        ]
    }
}

同樣,我的問題是我應該在請求傳遞的參數不是我期望的值的情況下傳遞200或400 HTTP狀態嗎? 還是應該始終是200響應,因為請求正在運行?

什么是最佳做法?

使用404。始終。 404.否則,就是誤解了URI和資源的性質。 如果http://blah.com/api/v1/dosomething/標識了該資源,而123a僅僅是該資源的參數,則其他代碼可能有意義。 但這沒有: http://blah.com/api/v1/dosomething/123 : http://blah.com/api/v1/dosomething/123標識資源。 如果不存在這樣的資源,則返回404 Not Found

您可能擁有一些處理細節,可以同時處理這兩個資源http://blah.com/api/v1/dosomething/123http://blah.com/api/v1/dosomething/123a ,但這不是資源。 從羅伊·菲爾丁(Roy Fielding)的論文中

“資源不是存儲對象。資源不是服務器用來處理存儲對象的機制。資源是概念性映射-服務器接收標識符(標識映射)並將其應用於當前映射實現(通常是特定於集合的深樹遍歷和/或哈希表的組合)以找到當前負責的處理程序實現,然后處理程序實現會根據請求內容選擇適當的操作+響應。隱藏在Web界面后面;只能通過Web界面訪問的客戶端不能假設其性質。”

由作者編輯:422是錯誤的答案。 我誤解了最初的問題並給出了無效的答案。 請參閱@fumanchu的回復: https ://stackoverflow.com/a/10955717/441250。 我下面的回答是錯誤的。

我建議使用“ 422無法處理的實體”,並在響應的正文中包含失敗信息。

422(不可處理實體)狀態代碼表示服務器
了解請求實體的內容類型(因此
415(不受支持的媒體類型)狀態碼不正確),並且
請求實體的語法正確(因此為400(錯誤請求)
狀態代碼不正確),但無法處理其中的說明。 例如對於如果XML可能會出現此錯誤情況
請求主體包含格式正確的(即,語法正確的),但是
語義錯誤的XML指令。

處理錯誤時,使用“ 200 Ok”或任何其他狀態代碼是不可接受的。

PS狀態代碼列表: http : //www.iana.org/assignments/http-status-codes/http-status-codes.xml

HTTP 400用於表示HTTP請求本身存在問題(例如無效的HTTP標頭)。 盡管您沒有收到期望的參數,但該請求仍然是有效的HTTP請求,因此我將返回200響應,但在JSON中包含缺少的參數的詳細信息。

暫無
暫無

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

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