axum - Tokio、Tower、Hyperで構築された人間工学に基づいたモジュラーWebフレームワーク

(Ergonomic and modular web framework built with Tokio, Tower, and Hyper)

Created at: 2021-05-30 17:22:25
Language: Rust

アクスム

axum
は、人間工学とモジュール性に焦点を当てたWebアプリケーションフレームワークです。

ビルドの状態 Crates.io ドキュメンテーション

このクレートの詳細については、クレートのドキュメントを参照してください。

高レベルの機能

  • マクロフリーAPIを使用してハンドラーに要求をルーティングします。
  • 抽出器を使用して要求を宣言的に解析します。
  • シンプルで予測可能なエラー処理モデル。
  • 最小限の定型文で応答を生成します。
  • タワータワー-httpエコシステムを最大限に活用する ミドルウェア、サービス、およびユーティリティ。

特に最後のポイントは、他のフレームワークとは一線を画すものであり、独自のミドルウェアシステムを持たず、代わりにtower::Serviceを使用しています。これは、タイムアウト、トレース、圧縮、 承認など、無料で。また、ミドルウェアを ハイパーまたはトニックを使用して作成されたアプリケーション。

axum
axum
axum

重大な変更

現在、axum 0.6に向けて取り組んでいるため、ブランチにはブレーキングが含まれています 変遷。crates.io および最新のリリース内容については、0.5.xブランチを参照してください 変更ログ。

main

使用例

use axum::{
    routing::{get, post},
    http::StatusCode,
    response::IntoResponse,
    Json, Router,
};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;

#[tokio::main]
async fn main() {
    // initialize tracing
    tracing_subscriber::fmt::init();

    // build our application with a route
    let app = Router::new()
        // `GET /` goes to `root`
        .route("/", get(root))
        // `POST /users` goes to `create_user`
        .route("/users", post(create_user));

    // run our app with hyper
    // `axum::Server` is a re-export of `hyper::Server`
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    tracing::debug!("listening on {}", addr);
    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

// basic handler that responds with a static string
async fn root() -> &'static str {
    "Hello, World!"
}

async fn create_user(
    // this argument tells axum to parse the request body
    // as JSON into a `CreateUser` type
    Json(payload): Json<CreateUser>,
) -> impl IntoResponse {
    // insert your application logic here
    let user = User {
        id: 1337,
        username: payload.username,
    };

    // this will be converted into a JSON response
    // with a status code of `201 Created`
    (StatusCode::CREATED, Json(user))
}

// the input to our `create_user` handler
#[derive(Deserialize)]
struct CreateUser {
    username: String,
}

// the output to our `create_user` handler
#[derive(Serialize)]
struct User {
    id: u64,
    username: String,
}

この例と他のサンプルプロジェクトについては、 サンプルディレクトリ

その他の例については、クレートのドキュメントを参照してください。

パフォーマンス

axum
ハイパーの上にある比較的薄い層であり、ほとんど追加しません オーバーヘッド。したがって、パフォーマンスはハイパーに匹敵します。あなたは見つけることができます ここここのベンチマーク。
axum

安全

この木枠は、すべてが実装されていることを確認するために使用します 100%安全なラスト。

#![forbid(unsafe_code)]

サポートされている最小の Rust バージョン

アクスムのMSRVは1.60です。

examplesフォルダーには、さまざまな使用方法の例が含まれています。ドキュメントには、多くのコードスニペットと例も含まれています。本格的な例については、コミュニティが管理するショーケースチュートリアルをご覧ください。

axum

ヘルプの利用

のリポジトリには、その方法を示すいくつかの例もあります すべてをまとめるために。コミュニティが管理するショーケースチュートリアルでは、実際のアプリケーションの使用方法も示しています。Discordチャンネルで質問したり、質問の問題を開いたりすることもできます。

axum
axum

コミュニティプロジェクト

コミュニティが維持している木枠とプロジェクトのリストについては、こちらをご覧ください で構築されています。

axum

貢献

🎈プロジェクトの改善にご協力いただきありがとうございます!私たちはとても幸せです あなたが!プロジェクトに参加するのに役立つ寄稿ガイドがあります。

axum

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。

寄付

特に明記しない限り、意図的に提出された投稿 あなたが含めるために、MITとしてライセンスされるものとします。 追加の利用規約。

axum