1 个不稳定版本

0.0.0 2024年8月24日

#26 in #invoke

MPL-2.0 许可证

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