我目前正在实现一个RESTful API(没什么大不了的,只是为了我正在开发的博客引擎)并且我对HTTP状态兼容性有一些疑问.
要创建一个新的博客文章,我必须做一个POST请求,如果一切顺利,将创建帖子,然后以与请求相对应的格式返回.
我在这个页面上从维基百科阅读了有关200 OK
状态的信息
在POST请求中,响应将包含描述或包含操作结果的实体
好的.但后来有201 Created
状态:
请求已完成,并导致创建新资源.
所以我的问题是:当一个POST请求成功并创建一个新的博客帖子时,我发回这两个http状态代码,或者一次只允许一个?
我没有从RFC获得这些信息,以为我没有完全阅读它.
我想一次只允许一个HTTP状态,但我应该使用哪一个?
编辑(新问题):如果操作正在编辑现有的博客帖子怎么办?我在URI上有一个PUT请求,这次我还要发回200 OK
一个Location:
标题呢?因为这个位置与PUT请求的URI完全相同,除了它应该是GET请求,这样可以吗?
所有2xx状态都是成功的.但是,在POST创建资源的情况下,您可能应该将201和一个位置一起返回到资源.从规格:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
请求已完成,并导致创建新资源.新创建的资源可以由响应实体中返回的URI引用,其中由Location头字段给出的资源的最具体URI.响应应该包括一个实体,其中包含资源特征和位置的列表,用户或用户代理可以从中选择最合适的资源特征和位置.实体格式由Content-Type头字段中给出的媒体类型指定.原始服务器必须在返回201状态代码之前创建资源.如果无法立即执行操作,服务器应该响应202(已接受)响应.
换句话说,你应该返回:
201 Created Location: http://www.example.com/path/to/resource
然后,浏览器将知道这是要引用的资源,并且请求同时成功.您无需担心多状态.