RESTful中,GET用来获取资源,POST用来新建资源或更新资源,PUT用来更新资源,DELETE用来删除资源.可能有不少人跟我一样,开始都是这样理解RESTful的.

PUT POST 新增资源:

  1. /catgory/海鲜

  2. /category/{$category_id}

第一种情况,新增资源的uri是由客户端来决定的,此时使用PUT.
第二种情况,新增资源的uri是服务端自动产生的ID,是由服务端来决定的,此时使用POST.

一个关于PUT DELETE的坑 

引用http://www.restapitutorial.com/ 的一段话.

#PUT is not a safe operation, in that it modifies (or creates) state on the server, but it is idempotent. In other words, if you create or update a resource using PUT and then make that same call again, the resource is still there and still has the same state as it did with the first call.

从HTTP协议的角度出发,当修改一个资源的内容时,使用PUT请求,其实这是对RESTful的一个错误理解.REST是一种风格,但是还是依赖于HTTP协议.在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别.idempotent是数学中的一个概念,既幂等;何谓幂等?一个方法重复执行多次,产生相同的效果,就叫做幂等.

继续看上面两种情况,第一种,不管提交几次请求,总是产生海鲜这个分类,所以应该就算是幂等的;那是否可以理解为:PUT只有在不会对服务器状态产生影响的时候才使用?继而是否可以理解为 POST 可以用来新增或者修改资源,而PUT只能用来新增资源?

What The Fuck!

好吧,REST只是风格而不是标准,怎么做,就看个人心情了.