首页 > 解决方案 > 如果我有两个用于同一资源的 URI,那么 REST 响应的 HTTP Location 标头中应该返回什么 URI?

问题描述

假设我正在为具有资源的博客 REST API 建模BlogPost并且Comment. Blog然后我为和Post资源添加以下 URI :

/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts

并且由于应该避免深度嵌套,我为所有Posts 创建单独的端点以获得它们的 Comment`s:

/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments

现在,如果我实施为特定端点POST创建新的操作,我是否应该设置标头值以响应:PostBlog/api/blogs/{blogId}/postsLocation

/api/blogs/{blogId}/posts/123

或者

/api/posts/123

?

在任何一种情况下,我都可以获取相同的资源,但是根据 REST 样式,是否有一些偏好,应该在成功后返回给客户端POST

标签: resthttp

解决方案


如果由于成功处理 POST 请求而在源服务器上创建了一个或多个资源,则源服务器应该发送一个 201(已创建)响应,其中包含一个 Location 头字段,该字段为创建的主要资源提供标识符(第 7.1 节.2) 以及在引用新资源时描述请求状态的表示。-- RFC 7231

哪个资源是“主要资源”?这取决于您 - 资源的优先级将取决于您的资源模型,而 REST / HTTP 不关心您使用什么模型。

实际上,它归结为“您希望在访问日志中看到哪个 URI?”


推荐阅读