2014-07-04 74 views
2

我在PHP中創建一個REST API。客戶可能會嘗試執行不可用的操作。 (例如,它試圖改變不可通過的資源的屬性......例如:試圖將「country」屬性的值改變爲「Julius Caesar」)我應該發送什麼HTTP狀態碼與響應一起回傳?我猜測在403和409之間。 我不知道403 Forbidden是隻與用戶權限有關,還是可以用於此目的? 在什麼情況下我應該用戶409 Confloct? 總結什麼是非法操作的正確HTTP響應狀態?REST API最佳HTTP狀態響應非法操作

+0

我認爲代碼必須是403,還有他們之間的差別不大到這裏看看:[鏈接](http://www.restapitutorial.com/httpstatuscodes.html ) – Ko2r

+0

這裏405是否合適?用戶正在使用POST/PUT請求來更新只讀值。 – stevendaniels

回答

3

在這種情況下,我通常會選擇400 Bad Request。我不確定更具體的400範圍狀態代碼是否會更適合,但是我不會使用403。對我而言,403是與安全相關的,不應該用於請求有效負載驗證錯誤。

至於409 Conflict,如果請求有效,我通常會使用它,但是狀態改變在某種程度上是非法的。但是,我也看到它也用於其他環境。最後,只要您在API中保持一致(並記錄返回狀態代碼的含義),您就可以靈活地決定如何表達錯誤。

7

我想你應該在這裏使用403 Forbidden

HTTP specification

服務器理解了請求,但拒絕執行。 授權不起作用,請求不應重複。 (...)

由於您拒絕更改「country」的值,因此這是您要返回的狀態碼。客戶不是授權來更改資源的國家。

409 Conflict不是適合在這種情況下。當例如有人發送請求來更新資源時,將使用409狀態,但是由於資源在此期間已被修改,所以它們的資源版本已過時。換言之,客戶端的數據與服務器上的數據之間存在衝突。這與允許改變資源的某些屬性無關。

由於與資源的當前 狀態衝突,請求無法完成。此代碼僅在 期望用戶可能能夠解決衝突且 重新提交請求的情況下才允許使用此代碼。響應主體應該包含足夠的 信息供用戶識別衝突的來源。 理想情況下,響應實體將包含用於解決問題的 用戶或用戶代理的足夠信息;然而,這可能不是 ,並不是必需的。

衝突最有可能發生以響應PUT請求。對於 例如,如果版本正在使用,並陸續投放實體 包括改革資源與那些由 早期(第三方)請求作出衝突時,服務器可能會使用409響應 以表明它無法完成請求。在這種情況下,響應實體可能包含 這兩個版本之間的差異列表,格式爲響應Content-Type定義的格式。

(重點煤礦)