166个稳定版本

5.0.3 2024年7月19日
5.0.0 2024年3月30日
4.0.1 2024年3月4日
3.0.6 2023年11月19日
0.9.0 2021年10月8日

#224网络编程

Download history 8654/week @ 2024-05-04 9414/week @ 2024-05-11 8747/week @ 2024-05-18 7594/week @ 2024-05-25 9410/week @ 2024-06-01 8926/week @ 2024-06-08 11869/week @ 2024-06-15 12344/week @ 2024-06-22 10516/week @ 2024-06-29 14771/week @ 2024-07-06 11911/week @ 2024-07-13 12689/week @ 2024-07-20 11614/week @ 2024-07-27 10707/week @ 2024-08-03 11953/week @ 2024-08-10 11195/week @ 2024-08-17

48,018 每月下载量
用于 115 个crate(直接使用36个)

MIT/Apache

5MB
31K SLoC

Rust 26K SLoC // 0.0% comments JavaScript 5.5K SLoC // 0.0% comments Shell 80 SLoC

诗OpenAPI

为诗提供快速且类型安全的OpenAPI实现。


Poem-openapi 允许您轻松实现符合 OpenAPIv3 规范的API。它使用过程宏生成大量的样板代码,让您只需关注更重要的业务实现。

功能

  • 类型安全 如果您的代码可以编译,则它完全符合 OpenAPI v3 规范。
  • Rustfmt友好 不要创建任何不符合Rust语法规范的DSL。
  • IDE友好 由过程宏生成的任何代码都不会直接使用。
  • 最小开销 所生成的代码都是必要的,几乎没有开销。

crate功能

为了避免编译未使用的依赖项,诗禁用了某些功能,其中一些默认禁用

功能 描述
chrono chrono crate 集成。
time time crate 集成。
humantime humantime crate 集成
openapi-explorer 添加OpenAPI Explorer支持
swagger-ui 添加Swagger UI支持
rapidoc 添加RapiDoc UI支持
redoc 添加Redoc UI支持
email 支持电子邮件字符串
hostname 支持主机名字符串
uuid uuid crate 集成
url url crate 集成
geo geo-types crate 集成
bson 集成 bson crate
rust_decimal 集成 rust_decimal crate
prost-wkt-types 集成 prost-wkt-types crate
static-files 支持静态文件响应
websocket 支持websocket

安全性

该crate使用#![forbid(unsafe_code)] 确保所有内容都使用100%安全的Rust实现。

示例

use poem::{listener::TcpListener, Route};
use poem_openapi::{param::Query, payload::PlainText, OpenApi, OpenApiService};

struct Api;

#[OpenApi]
impl Api {
    #[oai(path = "/hello", method = "get")]
    async fn index(&self, name: Query<Option<String>>) -> PlainText<String> {
        match name.0 {
            Some(name) => PlainText(format!("hello, {}!", name)),
            None => PlainText("hello!".to_string()),
        }
    }
}

#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
    let api_service =
        OpenApiService::new(Api, "Hello World", "1.0").server("http://127.0.0.1:3000/api");
    let ui = api_service.swagger_ui();
    let app = Route::new().nest("/api", api_service).nest("/", ui);

    poem::Server::new(TcpListener::bind("0.0.0.0:3000"))
        .run(app)
        .await
}

此功能需要启用。可以在 Cargo.toml 文件中添加功能来实现。

[dependencies]
poem = "3"
poem-openapi = { version = "5", features = ["swagger-ui"]}
tokio = { version = "1", features = ["full"] }

运行示例

在浏览器中打开 http://127.0.0.1:3000/,您将看到包含这些API定义的 Swagger UI

> cargo run --example hello_world

> curl http://127.0.0.1:3000/api/hello
hello!

> curl http://127.0.0.1:3000/api/hello?name=sunli
hello, sunli!        

MSRV

此crate支持的最小Rust版本为 1.75.0

贡献

🎈 感谢您为改进项目做出的贡献!我们非常高兴能拥有您!

许可协议

根据您的选择,许可协议可以是以下之一

贡献

除非您明确声明,否则您提交给Poem的所有有意包含的贡献,都应按Apache协议许可,不附加任何额外条款或条件。

依赖

~23–38MB
~672K SLoC