将 POST 用于 REST 中的所有内容是错误的吗?我知道 POST 用于更新和创建,但如果我也将它用于 SELECTS 和 DELETS 怎么办?我基本上需要的是一个可以对数据库进行 CRUD 操作的 Web 服务。我正在使用 PHP。另外,如果我使用查询字符串而不是使用 JSON 或 XML 来执行 POST 请求怎么办?
6 回答
是的,这是错误的。如果您将 POST 用于更新以外的任何事情,那么您实际上并没有遵循 REST 约定。
你可以用叉子喝汤,但为什么呢?无论如何,您可以使用任何方法,只是不要将其称为 REST 协议。
在这个 REST 教程中,该系列的第 4 篇文章说:
对于创建、更新和删除数据,请使用 POST 请求。(如上所述,当需要复杂参数时,POST 也可用于只读查询。)
当然 GET 通常用于只读查询,所以放在一起,如果复杂性是默认假设,这是一种方便的假设,当没有说明复杂性和简单性之间的阈值时,那么这个人就足够权威了写一个关于 REST 的完整系列就是说可以发布所有内容。可能是缓存对各种 HTTP 动词的响应做出了一些假设,这可能是有益的,但如果您的应用程序没有从缓存中受益(实际上,可能会受到缓存的伤害,所以禁用它或做一些事情以使您的应用程序不会受到它的影响)然后我不知道是否有任何问题。
将 POST 用于 REST 中的所有内容是错误的吗?
您不能将 POST 用于 REST 中的所有内容(例如,仅用于请求,而不用于响应),因此关于错误或正确的问题不是一个有效的问题。
我知道 POST 用于更新和创建,但如果我也将它用于 SELECTS 和 DELETS 怎么办?
它通常可以正常工作。
我基本上需要的是一个可以对数据库进行 CRUD 操作的 Web 服务。
没关系。
我正在使用 PHP。
那也很好。PHP hast 支持 HEAD、GET 和 POST 方法。对于 PUT 和 DELETE 方法,您需要进行更多编码。
另外,如果我使用查询字符串而不是使用 JSON 或 XML 来执行 POST 请求怎么办?
您使用查询字符串而不是 JSON/XML 请求正文。REST 没有指定协议,所以你可以做任何你喜欢的事情。在 PHP 中使用“查询字符串”可能是一个好主意,因为 PHP 支持那些开箱即用的。但这取决于您用于处理程序的内容或您想要支持的内容。
由于您的问题非常广泛,您可能需要先阅读一些关于 REST 的基本描述,以便更具体地提出:REST 简介。
如果您对所有操作都使用 POST,则不能再将其称为 REST。
所以这没有错,但也不是 REST :)
将 POST 用于可重复的调用是错误的。
POST 调用永远不会被缓存,但您的选择调用应该是可缓存的(并且可重复),因此您不应该为它们使用 POST。
但是没有技术上的原因你不能通过 POST 强制所有内容,(特别是所有浏览器都不支持 DELETE),但这确实意味着缓存对你的任何调用都不起作用,而且你的用户可能如果已进行 POST 调用来创建网页,则无法在不要求确认页面重新加载的情况下刷新网页。