REST|REST Style中的POST和PUT
REST风格使用HTTP协议原生的GET、PUT、POST、DELETE方法表示动作,其中PUT和POST方法的确切含义比较难以区分,本文就是要尝试区分这两种方式在语义和使用上的区别。
说在前面,这四种方法当然都可以实现彼此的功能,因为他们实际上只有名字上的区别,但作为严格规范的RESTful设计,还是应当适当明确语义,避免含糊。
HTTP/1.1 Spec
The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line
The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI."从上面的说明可以看到,POST方法用于创建,而PUT方法用于创建和更新。那么究竟应当用POST还是PUT来表示更新的语义。
如何区分两者 对于两者的更明确区分其实没有什么权威说法,在网络上可以看到非常多的争论,我个人倾向于以下两点(没有说别的看法不好的意思,对不起!)。
- 【REST|REST Style中的POST和PUT】幂等性
PUT方法在语义上具有幂等性,这是一个非常棒的特性,连续两次的相同PUT请求和只有一次请求得到的效果相同。PUT只是把Object放在那里,下一次放会自然地覆盖前一次。
- PUT从语义上更倾向于指向一个明确的带有名称的资源
PUT/user-report/fzwanPOST /user-report/
PUT指向一个具体的ID或者名称,而POST不在URL中指定。
推荐阅读
- 热闹中的孤独
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 如何在Mac中的文件选择框中打开系统隐藏文件夹