#http-api #http #api-bindings #rfc-9457 #rfc-7807

问题详情

支持 HTTP API 中问题详情(RFC-7807 / RFC-9457)的响应

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 日

180HTTP 服务器

Download history 188/week @ 2024-04-15 59/week @ 2024-04-22 127/week @ 2024-04-29 82/week @ 2024-05-06 98/week @ 2024-05-13 59/week @ 2024-05-20 69/week @ 2024-05-27 42/week @ 2024-06-03 99/week @ 2024-06-10 129/week @ 2024-06-17 157/week @ 2024-06-24 165/week @ 2024-07-01 12/week @ 2024-07-08 61/week @ 2024-07-15 34/week @ 2024-07-22 94/week @ 2024-07-29

每月 208 次下载
用于 yeet-yoink

MIT 许可证

19KB
308

问题详情

Build status Crates.io Documentation

此 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