什么动词和有效负载将API资源设置为301 Moved?

时间:2016-03-10 23:13:22

标签: api rest redirect

假设我在RESTful API中有两个对象:

 /resource/blue
 /resource/red

现在我想将它们中的两个结合起来并将它们指向一个新对象

/resource/orange

当我转到/ resource / blue或red时,我想收到像

这样的回复
HTTP/1.1 301 Moved Permanently
Date: Thu, 10 Mar 2016 21:57:47 GMT
Location: /resource/orange

到目前为止一直这么好......我们可以根据Mongo中的数据在Spring中实际设置。但是,将我的蓝色资源更改为301重定向到我的新橙色资源的最佳RESTful请求是什么?应该是......

PUT /resource/blue
{"movedto" : "/resource/orange"}

DELETE /resource/blue
{"movedto" : "/resource/orange"}

还是其他什么?

2 个答案:

答案 0 :(得分:2)

这看起来真的像PUT,因为你正在更新资源(它的位置),移动它两次应该没有效果(你得到301 / 303) ,因为它已经存在了。

如果您在同一资源上使用DELETE两次,则调用将尝试删除不再存在的资源(已被移动),因此它应该实际返回404

另外,by definition DELETE动词:

  

除非在作出答复时,否则不应表示成功,   它打算删除资源或将其移动到无法访问的资源   位置。

您移动资源的位置不会无法访问。

答案 1 :(得分:0)

在这种情况下,您可以使用HTTP 303(请参阅其他)而不是HTTP 301(已移动)

响应

HTTP/1.1 303 See Other
Location: http://your.domain/resource/orange

希望这有帮助