在rest api中使用GET谓词进行更新



我知道http动词的使用是基于标准规范的。但我的问题是,如果我使用";CCD_ 2";对于更新操作和编写代码逻辑进行更新,在任何情况下都会产生问题吗?除了标准之外,还有什么理由只为特定目的使用这些动词呢?

如果我使用"获取";对于更新操作和编写代码逻辑进行更新,在任何情况下都会产生问题吗?

是。

一个简单的例子——假设客户端和服务器之间的网络不可靠;具体地说,在一段时间内,HTTP响应正在丢失。通用组件(如web代理(可能会超时,然后,注意到请求的方法令牌是GET,请第二次/第三次/第四次重新发送请求,服务器会对每个GET请求执行更新。

让我们进一步假设,这些多次更新操作会导致不希望的结果;我们该在哪里指责?

第二个例子:你向某人发送一份更新操作的链接副本,这样他们就可以在适当的时候向你发送请求。但是,假设您在电子邮件中向他们发送该链接,并且电子邮件客户端识别出uri并(作为性能优化(预取链接,从而过早触发更新操作。我们应该把责任归咎于哪里?

HTTP并不试图要求GET的结果是安全的。它所做的是要求操作的语义是安全的,因此,如果结果发生任何导致财产损失的事情,这是实现的错误,而不是接口或该接口的用户的错误——Fielding,2002

在这些和其他示例中,指责被正确地附加到服务器上,因为GET具有标准化的含义,其中包括请求的语义是安全的约束。

这并不是说在处理GET请求时不会产生副作用"命中计数器";几乎和网络本身一样古老。您在执行过程中有很大的自由度;只要你尊重统一的界面,就不会有太多麻烦。


经验报告:我们的一个内部工具使用GET请求来触发调度;在我们精心控制的上下文中(这是而不是网络规模(,我们侥幸逃脱了它,并且已经度过了很长一段时间。

借用你的语言,肯定有一些场景会给我们带来问题;但考虑到我们的控制,我们设法避开了它们。

不过,如果请求开始来自我们精心控制的环境之外,我不希望我们有机会。

我认为这是一个不错的问题。你在问一个假设:除了我们同意使用GET进行获取之外,做正确的其他还有什么价值吗?例如:除了"语义上很好"这一事实之外,还有价值吗。HTML中类似的问题可能是:;用<div>onclick代替<button>可以吗?(答案是否定的(。

当然有。客户端、服务器和中间用户都会根据使用的方法来改变他们的行为。即使您的服务器可以处理GET进行更新,并且您构建了一个使用它的客户端,您的浏览器可能仍然会感到困惑。

如果你对这个话题感兴趣,不要在论坛上提问;阅读规范。HTTP规范告诉客户端、服务器和代理在遇到某些方法、状态和头时应该做什么。

从RFC7231 开始

最新更新