REST中的PUT与POST
根据HTTP/1.1规范。
POST
方法用于请求源服务器接受请求中包含的实体,作为Request-Line
中Request-URI
标识的资源的新下级。
换句话说,POST
是用来创建的。
PUT
方法要求将所包含的实体存储在提供的Request-URI
下。如果 "Request-URI "指的是一个已经存在的资源,所包含的实体应该被认为是驻留在源服务器上的实体的修改版本。如果 "Request-URI "没有指向现有的资源,并且该URI能够被请求的用户代理定义为新的资源,则源服务器可以用该URI创建资源。
也就是说,PUT
是用来创建或更新的。
那么,应该用哪一个来创建资源?还是需要同时支持两者?
5202
3
总的来说:
PUT和POST都可用于创建。
你必须问"你在对什么进行操作?"来区分你应该使用什么。让我们假设你正在设计一个用于提问的API。 如果你想使用POST,那么你将对一个问题列表进行操作。如果你想使用PUT,那么你将对一个特定的问题进行处理。
两者都可以使用,那么我应该在我的RESTful设计中使用哪一个:。
你不需要同时支持PUT和POST。
使用哪一个由你自己决定。 但要记住,根据你在请求中引用的对象,使用正确的方法。
一些注意事项。
一个例子:
我写了以下内容,作为SO上另一个关于这个问题的答案的一部分。
使用POST来创建,使用PUT来更新。反正Ruby on Rails就是这样做的。
REST是一个非常*高层次的概念。事实上,它甚至根本就没有提到HTTP!
如果你对如何在HTTP中实现REST有任何疑问,你可以随时看看[Atom Publication Protocol(AtomPub)][1]规范。AtomPub是一个用HTTP编写RESTful webservices的标准,它是由许多HTTP和REST名人开发的,REST的发明者和HTTP的(共同)发明者Roy Fielding也提供了一些意见。
事实上,你甚至可以直接使用AtomPub。虽然它来自于博客社区,但它决不局限于博客:它是一个通用协议,用于通过HTTP与任意(嵌套)的任意资源集合进行REST式交互。如果你能把你的应用程序表示成一个资源的嵌套集合,那么你就可以直接使用AtomPub,而不必担心是否使用PUT或POST,返回什么样的HTTP状态码以及所有这些细节。
这就是AtomPub关于资源创建的内容(第9.2节)。