[英]REST API Design regarding DELETE method
我正在構建一個REST API。 實際上我理解了共同的指導和規則。
但我有DELETE方法的問題,因為我需要在請求中通過正文發送數據,DELETE方法將忽略正文。
如果你問什么數據讓我通過DELETE方法將它發送到身體,是一個'url'和一些其他參數。 當然'url'在數據庫中有id,所以我可以使用DELETE沒問題,比如DELETE https://api.example.com/content/url:url_id
。 但是,通過id,我選擇傳遞它自己和其他一些參數的URL。 我的業務邏輯和要求迫使我傳遞url而不是DELETE方法中的id。
所以在閱讀之后,我發現還有一些代理阻塞DELETE和PUT方法。 並且HTML表單僅支持GET和POST方法。
我開始認為最好只在我的REST API中使用GET
和POST
。 所以我可以使用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
在再次搜索和閱讀之后,我找到了一些解決方案
使用X-HTTP-Method-Override
使用api方法名稱,如flicker (api.flickr.com/services/rest/?method=flickr.collections.getInfo)
和mailchimp(api.mailchimp.com/1.3/?method=campaignDelete)
我想我喜歡解決方案1,使用'X-HTTP-Method-Override'。 你怎么看?
谷歌似乎使用X-HTTP-Method-Override,對此https://developers.google.com/gdata/docs/2.0/basics
Flicker和Mailchimp使用方法名稱,如解決方案2中所示
你不能發送帶有DELETE請求的正文。 它沒有意義!
RESTful會是
DELETE http://www.plocal:3000/api/v1/content/page-1
DELETE http://www.plocal:3000/api/v1/content/info-page
DELETE http://www.plocal:3000/api/v1/content/1
DELETE http://www.plocal:3000/api/v1/content/2
testcall用
curl -v http://www.plocal:3000/api/v1/content -X DELETE
URL是要刪除的內容項的標識信息嗎? 如果是這樣的話,
DELETE https://api.example.com/content/:id
並將url作為id的一部分。 Id不必嚴格整數。
您可能還想制作新的路線
resources :content, :except => [:delete] do
member do
delete delete_by_url
end
end
然后,您將擁有一個新的刪除路由,其中包含更合適的名稱和控制器中的特定操作。
DELETE https://api.example.com/content/:id/delete_by_url
我知道它是您業務邏輯的一部分,但我建議您重新考慮它,或者嘗試使用其他解決方案而不是REST。
通過做你提到的那些東西,你將破壞所有REST概念,但仍然沒有在你的應用程序上做足夠好的事情。
我認為在您的情況下,最好的解決方案是考慮您的業務邏輯。 也許它可以在不中斷REST的情況下完成。
如果您認為無法完成,那么我會建議您列出的第一個解決方案。 感覺不那么錯了。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.