如果同一个资源有两个URI,那么REST响应中的HTTPLocation头应该返回什么URI



假设我正在为博客REST API建模,该API具有资源BlogPostComment。然后,我为BlogPost资源添加以下URI:

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

由于应该避免深度嵌套,我为所有Post创建了单独的端点,以便获得它们的注释:

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

现在,如果我实现POST操作,为/api/blogs/{blogId}/posts端点上的特定Blog创建一个新的Post,我是否应该设置Location头值以响应:

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

/api/posts/123

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

如果成功处理POST请求,在源服务器上创建了一个或多个资源,源服务器应发送一个201(创建(响应,该响应包含一个位置头字段,该字段提供创建的主资源的标识符(第7.1.2节(和一个描述在引用新资源时请求状态的表示RFC 7231

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

实际上,它归结为";您希望在访问日志中看到哪个URI">