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 在 网络编程
48,018 每月下载量
用于 115 个crate(直接使用36个)
5MB
31K 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支持 |
支持电子邮件字符串 | |
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
。
贡献
🎈 感谢您为改进项目做出的贡献!我们非常高兴能拥有您!
许可协议
根据您的选择,许可协议可以是以下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则您提交给Poem的所有有意包含的贡献,都应按Apache协议许可,不附加任何额外条款或条件。
依赖
~23–38MB
~672K SLoC