php - 关于 DELETE 方法的 REST API 设计

标签 php ruby-on-rails api rest api-design

我正在构建 REST API。实际上,我了解通用指南和规则。

但是我对 DELETE 方法有疑问,因为我需要在请求中通过正文发送数据,而 DELETE 方法将忽略正文。

如果你问什么数据让我在 DELETE 方法中通过正文发送它,是一个“url”和一些其他参数。当然,“url”在数据库中有 id,所以我可以毫无问题地使用 DELETE,例如 DELETE https://api.example.com/content/url:url_id。但与其传递 id,我选择传递 url 本身和其他一些参数。我的业务逻辑和要求迫使我在 DELETE 方法中传递 url 而不是 id。

所以在阅读之后,我还发现了一些代理阻止 DELETE 和 PUT 方法。并且 HTML 表单仅支持 GET 和 POST 方法。

我开始考虑在我的 REST API 中只使用 GETPOST 更好。 所以我可以像这样使用 POST 删除对象或资源:

POST /content/delete/url
Body :
    url : xxxx
    param1 : xxxx
    param2 : xxx

但在“REST API 设计规则手册,O'reilly”中,第 18 页说

"HTTP request methods should be used to indicate which CRUD function is performed"

以下反模式举例说明了不该做什么:

GET /deleteUser?id=1234
GET /deleteUser/1234
POST /users/1234/delete

再次搜索和阅读后,我得出了一些解决方案

  1. 使用 X-HTTP-Method-Override

  2. 使用 api 方法名称,如闪烁(api.flickr.com/services/rest/?method=flickr.collections.getInfo)mailchimp(api.mailchimp.com/1.3/?method=campaignDelete)

我想我喜欢解决方案 1,使用“X-HTTP-Method-Override”。你怎么看?

Google 似乎使用了 X-HTTP-Method-Override,转至此 https://developers.google.com/gdata/docs/2.0/basics

Flicker 和 Mailchimp 使用方法名称,如解决方案 2

最佳答案

我知道这是您业务逻辑的一部分,但我建议您重新考虑它或者尝试使用其他解决方案而不是 REST。

通过做你提到的那些事情,你将打破所有的 REST 概念,但仍然没有在你的应用程序上做得足够好。

我认为针对您的情况最好的解决方案是考虑您的业务逻辑。也许可以在不中断 REST 的情况下完成。

如果您认为无法完成,那么我会推荐您列出的第一个解决方案。感觉不太对劲。

希望对您有所帮助。

关于php - 关于 DELETE 方法的 REST API 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14315729/

相关文章:

ruby-on-rails - 日期选择 : default year selected

ruby-on-rails - 从多个数组项返回字符串

ruby-on-rails - 使用 Ubuntu VVM 开发 Rails 非常慢

jquery - 干净且具有视觉吸引力的 jQuery/JavaScript 图形 API

php - 在PHPExcel中将单元格格式化为百分比

php - 感叹号在PHP中是什么意思?

java - Spring : call REST API after receiving response from another REST API

api - 如何在 flutter 中有效地使用 provider 获取初始数据

php - 如何延迟或控制查询?

php - MySQL 查询 : find the category id in the products table, 但是 id 被包装成 `&12&`