由于PUT是幂等的,[[不应该PUT用于Create
,<< POST不用于Update
。
POST和PUT请求之间的根本区别是反映在Request-URI的不同含义中。一个中的URIPOST请求标识将处理附件的资源实体。该资源可能是数据接受过程,是通向其他协议或接受注释的单独实体。在相反,PUT请求中的URI标识包含请求-用户代理知道URI的意图以及服务器不得尝试将请求应用于其他资源。
但是,我确实根据名称本身看到了您来自哪里。
我通常看一下POST,因为它应该是将处理我的请求内容的URI(在大多数情况下,参数作为表单值),因此创建了一个新资源,而将PUT作为URI是我的请求的主题(/ users / 1234),已经存在的资源。
我相信命名法可以追溯到很久以前,请考虑一下早期的网络。可能需要将其消息POST
发送到留言板,然后再将PUT
其他内容添加到其消息中。
A PUT
请求要求服务器用随附的表示形式替换给定URI中的所有内容,而完全忽略当前内容。一个很好的类比是shell中的mv
命令。如果该文件不存在,它将在目标位置创建新文件,或替换现有文件。无论哪种情况,它都完全忽略其中的任何内容。您可以使用它来创建,也可以更新某些内容,只要您发送完整的表示即可。
POST
要求目标资源根据预定义的规则来处理有效负载,因此,它是用于HTTP协议尚未标准化的任何操作的方法。这意味着POST
可以做任何您想做的事情,只要您不从其他方法复制功能-例如,当您应该使用POST
时使用GET
进行检索-并且可以正确地记录下来。
因此,您可以根据实际情况将其用于创建和更新,但是对于PUT
,您必须对API中的所有内容都具有一致的语义,并且不能进行部分更新;而对于POST
,您可以只要您记录其工作原理,就可以做任何您想做的事情。
使用POST进行更新是可以的,从来没有说过POST仅用于“创建”操作。
也查看此线程:put vs post in rest
not本身与CRUD相对应。混乱是由于REST而引起的; does对应于CRUD。 REST使用HTTP,但是在允许的内容上有其他限制。我已经准备好此问答,以解释HTTP处理方法:
正在请求什么?POST
请求PUT
请求将POST
的URI标识PUT
的URI标识POST
和PUT
的URI中指定对象?/collectionId
/collectionId/resourceId
HTTP协议赋予集合多少自由度?
POST
,PUT
,POST
,HTTP协议没有定义集合应该发生的事情; rfc指出服务器应“ POST
将执行的操作的contractPUT
,HTTP协议要求响应“成功” POST
创建新资源时,响应为201。PUT
通常不会插入,而只会更新。)PUT
创建新资源时,响应将为201。运算是幂等的吗?POST
是PUT
是