0.1.0 |
|
---|
#9 在 #swagger-ui
20KB
204 行
soai OpenApi
soai的快速且类型安全的OpenApi实现。
soai
允许您轻松实现符合 OpenApi v3
规范的API。它使用过程宏生成大量样板代码,这样您只需关注更重要的业务实现。
特性
- 类型安全 如果您的代码可以编译,则它完全符合
OpenApi v3
规范。 - Rustfmt友好 不要创建任何不符合Rust语法规范的DSL。
- IDE友好 由过程宏生成的任何代码都不会直接使用。
- 最小开销 所有生成的代码都是必要的,几乎没有开销。
包特性
为了避免编译未使用的依赖项,soai限制了某些特性,其中一些默认禁用
特性 | 描述 |
---|---|
chrono | 与 chrono 包 集成。 |
swagger-ui | 添加swagger UI支持 |
rapidoc | 添加RapiDoc UI支持 |
redoc | 添加Redoc UI支持 |
支持电子邮件字符串 | |
hostname | 支持主机名字符串 |
uuid | 与 uuid 包 集成 |
url | 与 url 包 集成 |
bson | 与 bson 包 集成 |
rust_decimal | 与 rust_decimal 包 集成 |
static-files | 支持静态文件响应 |
安全性
此包使用 #![forbid(unsafe_code)]
确保所有内容都在100%安全的Rust中实现。
示例
use soai::{listener::TcpListener, Route};
use soai::{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("https://127.0.0.1:3000/api");
let ui = api_service.swagger_ui();
let app = Route::new().nest("/api", api_service).nest("/", ui);
soai::Server::new(TcpListener::bind("127.0.0.1:3000"))
.run(app)
.await
}
此功能需要启用。可以通过在 Cargo.toml
文件中添加功能来实现。
[dependencies]
soai = "1.3.29"
soai = { version = "1.3.29", features = ["swagger-ui"]}
tokio = { version = "1", features = ["full"] }
运行示例
在浏览器中打开 https://127.0.0.1:3000/
,您将看到包含这些Api定义的 Swagger UI
。
> cargo run --example hello_world
> curl https://127.0.0.1:3000
hello!
> curl https://127.0.0.1:3000\?name\=chris
hello, chris!
MSRV
此crate支持的最小Rust版本是 1.56.1
。
贡献
🎈 感谢您的帮助,让我们改进了项目!我们非常高兴有您加入!
许可证
根据以下任一许可证授权:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)。
贡献
除非您明确声明,否则您有意提交以包含在soai中的任何贡献,均应按Apache许可证授权,不附加任何额外条款或条件。
依赖
~5.5–9MB
~154K SLoC