#server #axum-server #api-version #path #configuration #authentication

axum-containerssh

本 OpenAPI 文档描述了实现 ContainerSSH 身份验证和配置服务器所需的 API 端点。(有关详细信息,请参阅 https://github.com/containerssh/libcontainerssh。)

2 个版本

0.5.0 2024 年 1 月 25 日
0.5.0-crt12024 年 2 月 15 日

#140 in HTTP 服务器

Download history 3921/week @ 2024-04-15 4395/week @ 2024-04-22 3644/week @ 2024-04-29 3404/week @ 2024-05-06 6353/week @ 2024-05-13 6192/week @ 2024-05-20 3289/week @ 2024-05-27 4542/week @ 2024-06-03 4631/week @ 2024-06-10 6471/week @ 2024-06-17 6650/week @ 2024-06-24 7284/week @ 2024-07-01 9515/week @ 2024-07-08 9364/week @ 2024-07-15 9505/week @ 2024-07-22 10115/week @ 2024-07-29

每月 38,533 次下载

Apache-2.0

1.5MB
29K SLoC

Rust API for axum-containerssh

本 OpenAPI 文档描述了实现 ContainerSSH 身份验证和配置服务器所需的 API 端点。(有关详细信息,请参阅 https://github.com/containerssh/libcontainerssh。)

概述

此服务器是由 [openapi-generator](《https://openapi-generator.tech》)项目生成的。通过使用来自远程服务器的 OpenAPI-Spec,您可以轻松生成服务器存根。

要了解如何将其作为自己的项目,请参阅此处:README

  • API 版本:0.5.0
  • 构建日期:2024-01-25T16:54:36.302357845ZEtc/UTC

此自动生成的项目定义了一个 API crate axum-containerssh,其中包含

  • 一个定义 Rust 中 API 的 Api 特征。
  • 表示底层数据模型的数据类型。
  • Axum 路由器,它接受 HTTP 请求并调用每个操作的适当 Api 方法。
    • 包括请求验证(路径、查询、正文参数)。

使用生成的库

生成的库有一些可选功能,可以通过 Cargo 激活。

  • 服务器
    • 默认启用,并创建基于 Axum 的服务器实现的基本骨架。
    • 要创建服务器堆栈,您需要提供一个 API 特征的实现以提供服务器功能。
  • 转换
    • 默认禁用,并为模型创建额外的 derive,允许在结构类似的对象之间进行“变形”。

有关如何在 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 axum-containerssh::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 = axum-containerssh::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 => {},
    }
}

依赖关系

~15–26MB
~452K SLoC