【问题标题】:Why use PUT and DELETE when I can do it with POST or GET [closed]为什么在我可以使用 POST 或 GET 时使用 PUT 和 DELETE [关闭]
【发布时间】:2013-05-21 16:31:56
【问题描述】:

我将开始使用一个名为 Slim 的 PHP REST 框架,并且有一些关于 PUT 和 DELETE 的文档,所以我想知道是否可以使用 GET 或POST 也一样。

有什么优势吗?

【问题讨论】:

  • 这只是将这些请求方法用于它们的用途,如果所使用的方法部分定义了请求本身,它会使请求更加清晰。
  • 好吧,既然可以用 POST 做所有事情,为什么还要用 GET 呢? :))

标签: php json http rest


【解决方案1】:

99% 的约定,但有用的约定。知道什么样的请求进来并且使 API 使用更容易(而不是强迫开发人员记住添加 action=blah,你可以告诉他们“无论何时你想删除某些东西 - 相同的请求,DELETE 动词)。

剩下的 1% 来自一个简单的事实:使用 DELETE 避免了必须在 GETPOST 变量中放置一个额外的参数来表示删除。这是通过选择可修改的字段而不是添加额外字段而不必重复自己而节省的字节。当您可以不这样做时增加复杂性是没有意义的。

需要注意的还包括:动词的幂等性。然而,这是一个约定 - GET 应该是幂等的,因为它很容易通过浏览器请求触发。它应该是“安全的重复”。

(最后一个有用的一点:大多数 MVC 框架通过 HTTP 动词拆分端点。为您节省 if!)

【讨论】:

  • 投反对票的人能否真正说出他们投反对票的原因?
  • 没错,这都是关于约定的。我没有看到为什么我们使用其他 http 动词(例如 put、delete 等)的任何其他好处。顺便说一句,至于避免额外的参数来为我们节省一个字节,我们还可以使用不同的方法“DeleteCustomer”并且它接受仅带有 id 参数 (/customer/delete) 的 http 发布请求。所以这样我们仍然会通过不指定动作参数来节省一个字节。
【解决方案2】:

使用 POST 进行 DELETE 几乎没有什么坏处,只是开发人员不太明显,中间人看不到您正在删除某些内容。

但是,将 GET 用于 DELETE 将是一个非常糟糕的主意。 HTTP 规范说 GET 操作必须是安全的,而删除某些内容是不安全的。不应该使用 GET 进行删除的实际原因有很多,稍微搜索一下应该会找到大量相关信息。

当 PUT 的“完全替换”语义适合您的场景时,请使用它。否则,请不要打扰恕我直言。

【讨论】:

    【解决方案3】:

    它被用作将请求映射到操作的一种方式,将请求的类型拆分为元信息(即GET)和实际数据作为在查询/正文中传递的内容(反对发送另一个查询说明操作的字符串参数,例如 uri 中某处的 action=delete/delete/

    您选择了一个使用 REST“规则”的 REST 框架。
    阅读有关 REST 的更多信息 - https://en.wikipedia.org/wiki/Representational_state_transfer

    【讨论】:

    • 我想说的是,定义这些 GET/POST/PUT/DELETE 的 REST 部分是使用请求中存在的元信息作为请求类型的一种方法,如与指定您想要对通过查询参数或请求正文传递的信息执行的操作的类型相反。
    • 使用 /foo/12/delete 而不是 object=foo&id=12&action=delete 不相关 - 您仍然使用 uri 中的操作
    • “反对 ..” 充其量只是误导,因为查询不是 反对 与前一个主题。
    • 我看不出它有什么误导性,但无论如何 - 我已经添加了那部分,享受吧。
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2013-08-26
    • 2012-01-08
    • 2019-07-18
    • 2020-02-06
    • 2010-10-21
    相关资源
    最近更新 更多