axum是Rust生态的web架構新秀,雖然項目成立不久,但github上的star數已超2.8k,其底層依賴的是高性能的Tokio,Tokio這貨就不多說了,借用知乎《深入淺出Rust異步程式設計之Tokio》上的一張圖:
Rust中的Tokio幾乎是同類架構的性能天花闆了,而axum在Tokio基礎上建構,起點就站在巨人的肩膀上。
先來一個Hello World的入門示例:
[dependencies]
axum="0.4.3"
tokio = { version = "1.0", features = ["full"] }
複制
添加上面的依賴項後,就可以編碼了:
use axum::{
routing::get,
Router,
};
#[tokio::main]
async fn main() {
// build our application with a single route
let app = Router::new().route("/", get(|| async { "Hello, World!" }));
// run it with hyper on localhost:3000
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
複制
啟動後,浏覽器裡跑一下:
再加幾個路由:
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
// our router
let app = Router::new()
.route("/", get(root))
.route("/foo", get(get_foo).post(post_foo))
.route("/foo/bar", get(foo_bar));
// run it with hyper on localhost:3000
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
// which calls one of these handlers
async fn root() -> String {
String::from("hello axum")
}
async fn get_foo() -> String {
String::from("get:foo")
}
async fn post_foo() -> String {
String::from("post:foo")
}
async fn foo_bar() -> String {
String::from("foo:bar")
}
複制
注意:/foo同時綁定了GET及POST方法的路由。可以測試一下:
參考連結:
https://docs.rs/axum/0.4.3/axum/index.html
https://zhuanlan.zhihu.com/p/107820568?from_voters_page=true
https://docs.rs/axum/0.4.3/axum/index.html