我正在構建一個REST API。其實我明白了共同的指導和規則。關於DELETE方法的REST API設計
但我有DELETE方法的問題,因爲我需要發送數據通過請求中的身體,其中DELETE方法將忽略身體。
如果你問什麼使得我在DELETE方法中通過body發送它的數據是'url'和其他參數。當然,'url'在數據庫中有id,所以我可以使用DELETE沒有問題,如DELETE https://api.example.com/content/url:url_id
。但是,通過身份證,我選擇傳遞自己的網址和一些其他參數。我的業務邏輯和要求迫使我在DELETE方法中傳遞url而不是id。
所以讀完之後,我發現還有一些代理阻塞了DELETE和PUT方法。而且HTML表單只支持GET和POST方法。
我開始考慮在我的REST API中只使用GET
和POST
。 這樣我就可以有網友發帖進行刪除和對象或資源這樣的:
POST /content/delete/url
Body :
url : xxxx
param1 : xxxx
param2 : xxx
但在 「REST API設計規則手冊,O'reilly的」,第18頁說
「HTTP請求方法應該用來指示CRUD功能 把進行」
以下反模式舉例說明什麼是不該做的事:
GET /deleteUser?id=1234 GET /deleteUser/1234 POST /users/1234/delete
搜索,並再次看完之後,我想出了使用API方法名稱,比如閃爍(api.flickr.com/services/rest/?method=flickr.collections.getInfo)
和mailchimp(api.mailchimp.com/1.3/?method=campaignDelete)
我使用X-HTTP-Method-Override
一些解決方案
想我如解決方案1,使用'X-HTTP-Method-Override'。你怎麼看?
谷歌似乎使用X-HTTP-方法,覆蓋,逆向工程&這個https://developers.google.com/gdata/docs/2.0/basics
閃爍和Mailchimp使用方法的名稱,如在溶液中2
您可以使用DELETE發送正文有效內容(請參閱http://stackoverflow.com/a/5928241/89771)。 –
但這裏說不同http://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-request – Ahmad
@AlixAxel:我也這麼認爲 - 寫了我的API辦法。但這是一個壞主意。最後一些代理/網關刪除了刪除請求的主體。我們正在使用WS02 API網關,並將其刪除,所以如果外部調用(在內部工作正常),我的實際API從不會看到該主體。對我來說,需要一個身體的原因是,同一個網關不喜歡:在URL參數和我的ID包括他們。 – Adam