对 REST 协议中的所有功能使用 POST


Using POST for all functions in REST protocol

在REST中使用POST是错误的吗?我知道 POST 用于更新和创建,但如果我也将其用于选择和删除怎么办?我基本上需要一个可以对数据库执行 CRUD 操作的 Web 服务。我正在使用PHP。另外,如果我使用查询字符串来执行 POST 请求而不是使用 JSON 或 XML,该怎么办?

如果你对所有操作都使用 POST,你就不能再称之为 REST 了。

所以这没有错,但它也不是 REST :)

是的,这是错误的。 如果您将 POST 用于更新以外的任何操作,那么您实际上并没有遵循 REST 约定。

你可以用叉子吃汤,但为什么呢?无论如何,您可以使用任何方法,只是不要将其称为REST协议。

在 REST 中对所有内容使用 POST 是错误的吗?

你不能对 REST 中的所有内容使用 POST(例如,仅用于请求,而不是响应),因此关于错误或正确的问题不是一个有效的问题。

我知道 POST 用于更新和创建,但如果我也将其用于选择和删除怎么办?

它通常只是工作。

我基本上需要一个可以对数据库执行 CRUD 操作的 Web 服务。

没关系。

我正在使用PHP。

那也没关系。PHP 支持 HEAD、GET 和 POST 方法。对于 PUT 和 DELETE 方法,您需要进行更多的编码。

另外,如果我使用查询字符串来执行 POST 请求而不是使用 JSON 或 XML,该怎么办?

使用查询字符串而不是 JSON/XML 请求正文。REST 没有指定协议,所以你可以做任何你喜欢的事情。使用 PHP 使用"查询字符串"可能是一个好主意,因为 PHP 支持开箱即用的字符串。但这取决于您用于处理程序的内容或要支持的内容。

由于您的问题非常广泛,因此您可能希望先阅读一些 REST 的基本描述,以便您可以更具体地提问:REST 简介。

对可

重复的调用使用 POST 是错误的。

POST 调用

永远不会缓存,但您选择的调用应该是可缓存的(和可重复的),因此您不应该对它们使用 POST。

但是,没有技术原因说明为什么您不能强制通过 POST 执行所有操作(特别是因为并非所有浏览器都支持 DELETE),但这确实意味着缓存不适用于您的任何调用,并且您的用户可能无法刷新网页而不被要求确认页面重新加载如果已进行 POST 调用来创建它。

在这个 REST 教程中,该系列的第 4 篇文章说:

要创建、更新和删除数据,请使用 POST 请求。(如上所述,当需要复杂参数时,POST 也可用于只读查询。

当然,GET通常用于只读查询,所以把它们放在一起,如果复杂性是默认假设,当复杂性和简单性之间没有阈值时,这是一个方便的假设,那么这个足够权威的人在REST上写了一个完整的系列是说可以POST所有东西。可能是缓存对各种 HTTP 动词的响应做出一些假设,这可能是有益的,但如果您的应用程序没有从缓存中受益(实际上,可能会受到它的损害,因此请禁用它或执行某些操作,以便您的应用程序不会受到它的影响)那么我不知道是否有任何问题。