6 个版本 (3 个破坏性更新)
0.4.1 | 2024 年 2 月 5 日 |
---|---|
0.4.0 | 2024 年 2 月 5 日 |
0.3.0 | 2023 年 11 月 29 日 |
0.2.1 | 2022 年 12 月 23 日 |
0.1.0 | 2022 年 7 月 11 日 |
180 在 HTTP 服务器 中
每月 208 次下载
用于 yeet-yoink
19KB
308 行
问题详情
此 crate 提供了 HTTP API 中问题详情响应的实现,如 RFC-7807 / RFC-9457 所定义。这是 HTTP API 表明请求出现问题的标准方式,包括一些标准有效负载字段。
示例用法
以下是对 Axum 的有效处理程序,它返回 RFC-9457 第 3 节中的禁止示例。
async fn forbidden() -> problemdetails::Result<String> {
Err(problemdetails::new(StatusCode::FORBIDDEN)
.with_type("https://example.com/probs/out-of-credit")
.with_title("You do not have enough credit.")
.with_detail("Your current balance is 30, but that costs 50.")
.with_instance("/account/12345/msgs/abc")
.with_value("balance", 30)
.with_value("accounts", vec!["/account/12345", "/account/67890"]))
}
当与支持的 HTTP 服务器一起使用时,这将自动生成正确的 JSON 响应,并将 Content-Type 标头设置为正确的 application/+problem+json
值。
如果与不受支持的 HTTP 服务器一起使用,则可以手动提取问题详情的状态码和主体。body
字段已具有正确的结构,可以使用类似 serde
的方式格式化为 JSON,因此序列化应该像 HTTP 服务器允许的那样简单。
支持的 HTTP 服务器
目前,此功能仅支持以下 HTTP 服务器
可以在 示例目录 中找到与不同 HTTP 服务器一起使用的示例。
功能
HTTP 服务器支持位于相应的 HTTP 服务器功能标志之后。因此,您需要启用您所使用的 HTTP 服务器的正确功能。
目前支持的功能包括
axum
- 用于 Axum HTTP 服务器。
安全性
此 crate 使用 #![forbid(unsafe_code)]
确保所有内容都在 100% 安全的 Rust 中实现。
最低支持的 Rust 版本
problemdetails
的 MSRV 是 1.60.0。然而,与其一起使用的 HTTP 服务器可能需要更高版本。
许可证
本项目采用 MIT 许可证。
贡献
除非您明确说明,否则您提交给 problemdetails
的任何贡献,将被许可为 MIT,没有任何附加条款或条件。
依赖项
~2–5MB
~90K SLoC