0

我有一个要通过 POST 插入的资源;说预订。在某些情况下,服务器无法插入给定的对象,但需要向用户提供反馈,需要更改哪些内容才能插入它。例如,如果您发送包含以下内容的预订:

{
  "start": "2020-09-14T15:00:00Z",
  "end": "2020-09-14T15:00:00Z",
  "memberId": 5,
  "seat": "A5",
}

如果服务器看到座位 A5 已被占用,但想要返回在该时间范围内空闲的座位列表,我会使用什么?

409 Conflict 似乎有点像我想要的,因为在它的规范中你可以告诉用户出了什么问题。但我不确定这是否算作冲突。

4

1 回答 1

1

409 Conflict 似乎有点像我想要的,因为在它的规范中你可以告诉用户出了什么问题。

所有 4xx 响应代码都允许您告诉用户出了什么问题 - 请参阅RFC 7231

服务器应该发送一个包含错误情况解释的表示,以及它是临时的还是永久的。

也就是说,409很好

另一个需要考虑的合理替代方案是403 Forbidden

403(Forbidden)状态码表示服务器理解请求但拒绝授权。

这两个代码的规范文本是不同的,但是如果您查看规范,并没有很多迹象表明通用组件对它们的处理方式不同 - 它们都不可缓存,也不会对响应标头的语义进行任何重大更改,并且很快。

鉴于效果相同,您主要是在“您希望在访问日志中看到什么?”、“我们要发出哪个通用警报”等问题之间进行选择。

由于您的操作员可能不希望这些信号与损坏的 http 请求 (400) 和安全渗透尝试 (403) 交叉,因此为与您的内部域逻辑冲突的请求选择不同的代码将使他们的生活更轻松。

于 2020-10-01T20:23:19.293 回答