52 个版本 (29 个破坏性更新)
0.58.0 | 2023 年 12 月 18 日 |
---|---|
0.57.0 | 2023 年 7 月 4 日 |
0.56.0 | 2022 年 11 月 25 日 |
0.53.0 | 2022 年 6 月 28 日 |
0.1.2 | 2017 年 7 月 11 日 |
#1 in #http-error
5,290 个月下载量
用于 21 个包 (8 个直接)
66KB
997 行
HTTP-API-PROBLEM
基于 RFC7807 创建 API 响应内容的库。
用法
从 crates.io 获取您 Cargo.toml
的最新版本。
Serde
HttpApiProblem
实现了 Serialize
和 Deserialize
。
示例
use http_api_problem::*;
let p = HttpApiProblem::new(StatusCode::UNPROCESSABLE_ENTITY)
.title("You do not have enough credit.")
.detail("Your current balance is 30, but that costs 50.")
.type_url("https://example.com/probs/out-of-credit")
.instance("/account/12345/msgs/abc");
assert_eq!(Some(StatusCode::UNPROCESSABLE_ENTITY), p.status);
assert_eq!(Some("You do not have enough credit."), p.title.as_deref());
assert_eq!(Some("Your current balance is 30, but that costs 50."), p.detail.as_deref());
assert_eq!(Some("https://example.com/probs/out-of-credit"), p.type_url.as_deref());
assert_eq!(Some("/account/12345/msgs/abc"), p.instance.as_deref());
还实现了 [StatusCode] 的 TryFrom<u16>
use http_api_problem::*;
let p = HttpApiProblem::try_new(422).unwrap()
.title("You do not have enough credit.")
.detail("Your current balance is 30, but that costs 50.")
.type_url("https://example.com/probs/out-of-credit")
.instance("/account/12345/msgs/abc");
assert_eq!(Some(StatusCode::UNPROCESSABLE_ENTITY), p.status);
assert_eq!(Some("You do not have enough credit."), p.title.as_deref());
assert_eq!(Some("Your current balance is 30, but that costs 50."), p.detail.as_deref());
assert_eq!(Some("https://example.com/probs/out-of-credit"), p.type_url.as_deref());
assert_eq!(Some("/account/12345/msgs/abc"), p.instance.as_deref());
特性
Web 框架
有多个特性可以与 Web 框架集成
axum
warp
hyper
actix-web
salvo
tide
rocket
这些主要将 HttpApiProblem
转换为框架的响应类型,并实现特质以与框架的错误处理集成
ApiError
特性 api-error
启用了一种可以从 "api 处理程序" 返回的结构,这些处理程序生成响应并将其转换为 HttpApiProblem
。
感谢
对以下 GitHub 用户表示感谢,他们的贡献和灵感
- panicbit
- thomaseizinger
- SohumB
许可证
http-api-problem
主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
版权 (c) 2017 Christian Douven。
许可证: Apache-2.0/MIT
依赖项
~1–36MB
~558K SLoC