皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

crates.io:更改 API 状态代码

crates.io:更改 API 状态代码

Cargo 和 crates.io 是在 Rust 1.0 发布前的匆忙开发过程中开发的,以满足人们对管理依赖关系的工具和共享代码的注册表的需求。这项快速工作导致这些工具与一个最初无法返回正确 HTTP 响应状态代码的 API 相连。在 Rust 1.0 发布之后,Rust 对向后兼容性的稳定性保证使得修复这一问题变得非常困难,因为我们希望旧版本的 Cargo 能够继续使用当前的 crates.io API。

当旧版本的 Cargo 收到非 “200 OK “响应时,它会像这样显示原始 JSON 主体:

error: failed to get a 200 OK response, got 400 headers: HTTP/1.1 400 Bad Request Content-Type: application/json; charset=utf-8 Content-Length: 171 body: {“errors”:[{“detail”:“missing or empty metadata fields: description, license. Please see https://doc.rust-lang.org/cargo/reference/manifest.html for how to upload metadata”}]}

在 Cargo 1.34(2019 年中)发布的 #6771 拉取请求中对此进行了改进。此后,Cargo 也支持接收 4xx 和 5xx 状态代码,并从 JSON 响应中提取错误信息(如果有的话)。

2024-03-04 日,我们将把 API 从返回错误的 “200 OK “状态代码切换为新的 4xx/5xx 行为。更改后,Cargo 1.33 及以下版本将继续工作,但将显示原始 JSON 主体,而不是格式化后的错误信息。我们相信,这种错误信息显示方式的退化不会影响太多用户。根据 crates.io 的请求日志,Cargo 1.33 及更旧版本的请求数量极少。

以下是受此变更影响的 API 端点列表:

  • GET /api/v1/crates
  • PUT /api/v1/crates/new
  • PUT /api/v1/crates/:crate/:version/yank
  • DELETE /api/v1/crates/:crate/:version/unyank
  • GET /api/v1/crates/:crate/owners
  • PUT /api/v1/crates/:crate/owners
  • DELETE /api/v1/crates/:crate/owners

所有其他端点使用常规 HTTP 状态代码已经有一段时间了。

如果你还在使用 Cargo 1.33 或更旧的版本,我们建议你升级到新版本,以获得改进的错误信息和 Cargo 团队在此之后开发的所有其他功能。

转自 crates.io: API status code changes | Rust Blog (rust-lang.org)