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

Download history 1952/week @ 2024-04-08 1478/week @ 2024-04-15 1373/week @ 2024-04-22 1328/week @ 2024-04-29 1839/week @ 2024-05-06 1319/week @ 2024-05-13 1419/week @ 2024-05-20 1429/week @ 2024-05-27 1380/week @ 2024-06-03 2190/week @ 2024-06-10 1468/week @ 2024-06-17 1394/week @ 2024-06-24 1121/week @ 2024-07-01 1408/week @ 2024-07-08 1302/week @ 2024-07-15 1411/week @ 2024-07-22

5,290 个月下载量
用于 21 个包 (8 个直接)

Apache-2.0/MIT

66KB
997

HTTP-API-PROBLEM

crates.io docs.rs downloads CI license-mit license-apache

基于 RFC7807 创建 API 响应内容的库。

用法

crates.io 获取您 Cargo.toml 的最新版本。

Serde

HttpApiProblem 实现了 SerializeDeserialize

示例

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