1 个不稳定版本
新 0.0.0 | 2024年8月24日 |
---|
#26 in #invoke
8KB
95 行
Rust开放API API
未提供描述(由Openapi Generator生成 https://github.com/openapitools/openapi-generator)
概述
该服务器是由[openapi-generator] (https://openapi-generator.tech)项目生成的。通过使用远程服务器的OpenAPI-Spec,您可以轻松生成服务器存根。
要了解如何使其成为您自己的,请参阅此处: README
- API版本:1.0.0
- 构建日期:2024-08-16T17:58:32.453222200+08:00Asia/Shanghai
- 生成器版本:7.7.0
此自动生成的项目定义了一个名为openapi
的API包,它包含
- 一个定义Rust中API的
Api
特质。 - 表示底层数据模型的数据类型。
- Axum路由器,接受HTTP请求并调用每个操作的相应
Api
方法。- 包括请求验证(路径、查询、体参数)。
使用生成的库
生成的库有一些可选功能,可以通过Cargo激活。
服务器
- 默认启用,根据Axum创建服务器实现的基本骨架。
- 要创建服务器堆栈,您需要提供一个API特质的实现来提供服务器功能。
转换
- 默认禁用,并为模型创建额外的派生,允许在结构相似的类型对象之间进行“变形”。
有关如何在您的Cargo.toml
中使用功能的信息,请参阅 https://doc.rust-lang.net.cn/cargo/reference/manifest.html#the-features-section。
示例
struct ServerImpl {
// database: sea_orm::DbConn,
}
#[allow(unused_variables)]
#[async_trait]
impl openapi::Api for ServerImpl {
// API implementation goes here
}
pub async fn start_server(addr: &str) {
// initialize tracing
tracing_subscriber::fmt::init();
// Init Axum router
let app = openapi::server::new(Arc::new(ServerImpl));
// Add layers to the router
let app = app.layer(...);
// Run the server with graceful shutdown
let listener = TcpListener::bind(addr).await.unwrap();
axum::serve(listener, app)
.with_graceful_shutdown(shutdown_signal())
.await
.unwrap();
}
async fn shutdown_signal() {
let ctrl_c = async {
signal::ctrl_c()
.await
.expect("failed to install Ctrl+C handler");
};
#[cfg(unix)]
let terminate = async {
signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("failed to install signal handler")
.recv()
.await;
};
#[cfg(not(unix))]
let terminate = std::future::pending::<()>();
tokio::select! {
_ = ctrl_c => {},
_ = terminate => {},
}
}
依赖关系
~4–14MB
~205K SLoC