这俩个方法初看一下好像都是更新资源,但是有本质上的区别,那就是语义。在HTTP中,PUT被定义为幂等(idempotent)的方法,POST则不是,这是一个很重要的区别。
首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的。也就是说,如果一个网络重复执行多次,产生的效果是一样的,那就是幂等(idempotent)。
POST
用于提交请求,可以更新或者创建资源,是非幂等的,举个例子:
在用户注册功能上,每次提交都是创建一个用户账号,这个时候就用POST。
ESTful URL地址应为:/user/creation?user_name=&pwd=
PUT
用于向指定URL传送更新资源,是幂等的。
还是用户模块,比如修改用户密码,虽然提交的还是账户名跟用户密码这个俩个必填参数,但是每次提交都只是更新该用户密码,每次请求都只是覆盖原先的值。此时就该用PUT。
ESTful URL地址应为:/user/{user_id}/modify?pwd=**
用PUT还是POST
当需要以更新的形式来修改某一具体资源的时候,如何判断用PUT还是POST呢?
很简单,如果该更新对应的URI多次调用的结果一致,则PUT。如果每次提交相同的内容,最终结果不一致的时候,用POST。