更具体的 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.13.0.0,而是2.1.0

【讨论】:

以上是关于更具体的 HTTP 代码是“Semver 重大更改”吗?的主要内容,如果未能解决你的问题,请参考以下文章

用更具体的表达式重写假设

Mypy 子类中更具体的参数

使 arrayList.toArray() 返回更具体的类型

类型()-更具体的类型()

JavaScript type.of() - 更具体的typeof()

将前向声明的指针转换为更具体的类型