![](/img/trans.png)
[英]what should be HTTP status code if resource is not available for requested action?
[英]Expected HTTP status code for an action on a disabled resource
給定以下操作的預期/正確 HTTP 狀態代碼是什么:
400
)401
)403
)404
)501
)5xx
)資源當前被禁用,從而阻止操作以預期結果完成。 用戶可以更改資源的狀態並重試相同的請求。 有關資源為何無法執行所要求的操作的信息將包含在響應正文中。
我的想法是409 Conflict
將是最好的響應,因為用戶可能會更改資源的狀態並重新提交請求,但也許有更好的方法表明“您通常允許使用此方法,但資源當前處於阻止它按預期完成的狀態。”
似乎這是互聯網的共識,我在這里沒有看到更好的東西。 看到這里另一個類似的問題
409
此代碼用於用戶可能能夠解決沖突並重新提交請求的情況。 來源
然后跟進
響應 PUT 請求時最有可能發生沖突。 例如,如果正在使用版本控制並且被 PUT 的表示包含對資源的更改,這些更改與之前(第三方)請求所做的更改相沖突
這似乎更像是在客戶端構建調用時實體在客戶端下方移動,也許假設是客戶端在進行調用之前要求允許的操作。 如果您實現了它,我會說 409 對您的 API 完全有效,因為您為客戶端提供了僅發出有效請求的能力,除非其他人更改實體。
顯然,您應該保持一致,並記錄響應代碼及其用法。
根據 RFC 4918 ( https://tools.ietf.org/html/rfc4918#section-11.2 ),您可以使用代碼 422(不可處理實體)來處理類似的情況。
422 無法處理的實體
422(不可處理實體)狀態碼表示服務器
了解請求實體的內容類型(因此
415(不支持的媒體類型)狀態代碼不合適),以及
請求實體的語法是正確的(因此是 400(錯誤請求)
狀態代碼不合適)但無法處理包含的指令。 例如,如果 XML
請求正文包含格式正確(即語法正確),但
語義錯誤的 XML 指令。
409 似乎最合適,這就是http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html所說的:
僅在預期用戶可能能夠解決沖突並重新提交請求的情況下才允許使用此代碼。 響應主體應該包含足夠的信息讓用戶識別沖突的來源。 理想情況下,響應實體應包含足夠的信息供用戶或用戶代理解決問題; 然而,這可能是不可能的,也不是必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.