将 API 资源设置为 301 移动的谓词和有效负载



假设我在 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

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

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

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

还是别的什么?

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

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

此外,根据定义,DELETE动词:

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

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

在这种情况下,

您可以使用HTTP 303(请参阅其他)而不是HTTP 301(已移动)

响应

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

希望这有帮助

最新更新