rest - 如果我有两个用于同一资源的 URI,那么 REST 响应的 HTTP Location 标头中应该返回什么 URI?
问题描述
假设我正在为具有资源的博客 REST API 建模Blog
,Post
并且Comment
. Blog
然后我为和Post
资源添加以下 URI :
/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts
并且由于应该避免深度嵌套,我为所有Post
s 创建单独的端点以获得它们的 Comment`s:
/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments
现在,如果我实施为特定端点POST
创建新的操作,我是否应该设置标头值以响应:Post
Blog
/api/blogs/{blogId}/posts
Location
/api/blogs/{blogId}/posts/123
或者
/api/posts/123
?
在任何一种情况下,我都可以获取相同的资源,但是根据 REST 样式,是否有一些偏好,应该在成功后返回给客户端POST
?
解决方案
如果由于成功处理 POST 请求而在源服务器上创建了一个或多个资源,则源服务器应该发送一个 201(已创建)响应,其中包含一个 Location 头字段,该字段为创建的主要资源提供标识符(第 7.1 节.2) 以及在引用新资源时描述请求状态的表示。-- RFC 7231
哪个资源是“主要资源”?这取决于您 - 资源的优先级将取决于您的资源模型,而 REST / HTTP 不关心您使用什么模型。
实际上,它归结为“您希望在访问日志中看到哪个 URI?”
推荐阅读
- jquery - JQuery & Popper 如何显示调用元素文本
- applescript - 显示/隐藏 Finder,如果不存在则通过 AppleScript 创建新窗口
- reactjs - 翻译成es6导入
- mysql - 如何在将每个用户的记录插入同一张表之前检查现有记录?
- c# - AWS AMI 中的 Windows DPAPI 失败,访问被拒绝
- java - 更改 JButton 的大小
- html - 将无效/有效样式添加到引导输入组前置
- python - 当我将 Qsltter 移动到带有 matplotlib 图形的边缘时,如何避免 PyQt5 崩溃?
- sql - 为什么我的 SQL 在使用 INSERT INTO 时会跳过某些记录?
- python - Azure Databricks 中的 Python 版本