更具体的 HTTP 代码是“Semver 重大更改”吗?
Posted
技术标签:
【中文标题】更具体的 HTTP 代码是“Semver 重大更改”吗?【英文标题】:is a more specific HTTP code a "Semver breaking change"? 【发布时间】:2017-06-05 22:55:01 【问题描述】:假设我的 SemVer API 版本是 2.0.0
假设我有一个端点 /foo
,它现在总是错误地返回 200, "some message"
或 500, "some message"
我修复了一个错误,现在我可以检测到错误请求,现在我返回 200, "some message"
或 400, "some message"
或 500, "some message"
这是否被视为 SemVer 中的 API 重大更改?用户可能不期待 400,所以我可以看到 3.0.0
的情况,但是我也可以看到这应该一直是 BAD REQUEST 的 400,因为在某种意义上“HTTP”是我的 API,因此补丁修复了2.0.1
,所以我很伤心。
【问题讨论】:
在这个hypo中,您会在500
回复中返回有用的消息,还是只是一般消息?
不,我的 500 是一条通用消息,在错误请求的情况下是错误的
【参考方案1】:
我认为,在回答这个问题之前,您必须从哲学上确定责任所在。即,如果客户端代码无法处理新的(正确的)状态代码,这是否会破坏您更改的结果或客户端代码编写不当的结果。如果您之前在您的 500
回复中发送了一些有用的信息,那么可以合理地预期客户端代码可能会依赖它。
对我来说,这听起来就像是 minor 更改的定义:
当您以向后兼容的方式添加功能时[是]次要版本[。 . .]
实际内部服务器错误仍然正确发送,成功结果仍然正确发送;您所做的只是添加了让客户确定错误出现在哪里的能力。
编辑:所以我认为不是2.0.1
或3.0.0
,而是2.1.0
。
【讨论】:
以上是关于更具体的 HTTP 代码是“Semver 重大更改”吗?的主要内容,如果未能解决你的问题,请参考以下文章
使 arrayList.toArray() 返回更具体的类型