2017-07-07 136 views
0

偶爾我的API接收PUT請求,其中一個布爾屬性設置爲null。事情是這樣的:PUT無效屬性

{ 
    "name": "John Doe", 
    "email": "[email protected]", 
    "active": null 
} 

如果這將是一個補丁,我會忽略的屬性,但在PUT的情況下,我該怎麼辦?我的直覺說:設置主動爲假。但我不相信這是正確的REST行爲。

您認爲如何?

回答

0

RFC7231

6.5.1。 400錯誤的請求

400(錯誤請求)狀態代碼表示該服務器不能或 不會請求過程中由於一些被認爲是 客戶端錯誤(例如,惡意請求語法,無效請求 消息成幀或欺騙性請求路由)。

我會說你應該拒絕處理客戶端的請求,它不會通過數據驗證與400 Bad Request響應。

還要注意的是:

4.3.4。 PUT

目標資源的狀態是 創建或與由封閉在所述請求消息的有效載荷的表示 定義的狀態替換 PUT方法的請求。

所以,你不應該忽略無效的字段值。但是,如果您跳過數據驗證並接受客戶端發送的新資源狀態,則表示將與目標資源不一致,並且您可以嘗試重寫請求或使用409 ConflictRFC7231) :

原始服務器應該驗證PUT表示是 符合任何約束服務器有目標 資源不能或不會被PUT改變。當源服務器使用與URI相關的內部 配置信息以便爲GET響應上的表示元數據設置 值時,這是 特別重要。當PUT 表示是與目標資源不一致,原點 服務器應當要麼使它們保持一致,通過變換 表示或改變資源的配置,或用含有足夠的信息 到一個適當的錯誤消息響應 解釋爲什麼表示不合適。建議使用409(衝突) 或415(不支持的媒體類型)狀態碼,其中 特定於內容類型值的約束。