繁体   English   中英

Put VS Post VS Delete In Rest API

[英]Put VS Post VS Delete In Rest API

我对 Rest API 中的 Http 方法有疑问。我在互联网上阅读了很多关于此的信息,我们可以使用 Put 来创建或更新资源,使用 Post 来创建资源,使用 Delete 来删除资源。 但我是说这是强制性的吗?因为当我们编写代码时,我们只是放置了像 Put、Post 和 Delete 这样的注释,但是如果我使用 Delete Annotation 并且在 side 方法中我做其他事情会发生什么,假设我编写了添加逻辑而不是删除.我想我可以做到,类似于其他方法(Post和Put。)。那么这些Annotations的意义是什么。如果我能做到我上面提到的意味着写在Delete Annotation中添加的逻辑然后为我Delete对我来说只是一种请求,我可以为添加或更新编写任何逻辑。

类似地,我读到 Put 是幂等的,但是如果我编写添加逻辑而不是更新,那么它就不是幂等的。

可能是我在这里可能是错的。请澄清这一点。这让我感到困惑,没有任何地方可以解释,每个地方都有通用声明。

感谢和问候

阿弥陀佛

我是说这是强制性的吗?

不是强制性的,没有。

Roy Fielding 在2002 年做了一个有趣的观察:

HTTP 不会试图要求 GET 的结果是安全的。 它所做的是要求操作的语义是安全的

其他方法也是如此——我们都同意请求消息的含义(语义),因为这是标准(RFC 7230 等)中的内容。 所以 PUT 总是意味着“请用我提供的表示替换目标资源的当前表示”,但是您的实现对该消息的作用取决于您。

当然,如果您的实现令人惊讶,有一个重要的警告:

如果发生任何导致财产损失的事情,则是实现的错误,而不是接口或该接口的用户

REST 的重点是通用组件可以通过统一接口与您的资源进行交互。 如果您的实现与统一接口不匹配,那么这是您的错误,而不是组件中的错误,事情不能“正常工作”。

我读到 Put 是幂等的,但是如果我编写添加逻辑而不是更新,那么它就不是幂等的。

PUT 的语义是幂等的 如果您的 PUT 请求处理程序不是幂等的,那么您就犯了一个错误,并且您的实现有错误。 如果通用组件需要发送多个 PUT 消息(例如,因为响应在不可靠的网络上丢失),则该故障将成为故障。

当然,“添加逻辑”不一定是幂等的——考虑向字典添加键和值; 如果您两次添加相同的密钥,则与添加一次密钥相同。

d = {}
d[k] = v
d[k] = v # idempotent, because this is a no-op

e = {k:old}
if e[k] == old:
    e[k] == new:
if e[k] == old: # Again, idempotent, because the second copy of the message is a no-op
    e[k] == new 

如果有人发送 PUT 请求并且您不能确保幂等语义,那么应该发生的情况是您应该返回405 Method Not Allowed ,并确保您对OPTIONS的响应没有声称该资源支持 PUT 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM