一、前言
因为rust拥有着极高的性能,加上tokio这个非常优秀的运行时,这使得rust很适合被用于开发服务器。
目前rust已经拥有了众多的web框架,例如rocket、axum、axtix-web、tide、warp等等。
而axum这个web框架是由tokio团队所维护的,相对来说,可能在某些方面更加专业,所以本文也将以axum框架来介绍rust的web框架开发。
二、基本使用
axum框架是构建于tokio之上的,所以你想要使用axum,首先就需要添加tokio包。
下面是一个最小的依赖包:
[dependencies]
axum = "0.7.5"
tokio = { version = "1.39.2", features = ["full"] }
将上面两个依赖项复制到你的项目配置文件中,我们就可以开始开发web项目了。
首先,写好main.rs
文件中的异步入口函数:
#[tokio::main]
async fn main() {
}
不清楚tokio基本使用与原理的,可以先去看看这篇文章:rust异步库tokio入门
然后写好基本的axum服务器启动代码:
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(root));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn root() -> &'static str {
"Hello, World!"
}
首先是定义路由:
let app = Router::new().route("/", get(root));
所谓路由,就是我们在浏览器中看到的路径,比如本网站的一篇文章在浏览器上的链接为:
https://www.kucoding.com/article/229.html
去除前面的协议、域名,剩下的就是路由了:
/article/229.html
所以这里定义的路由/
代表的就是网站的根目录。
每个路由都可以接收所有可能的HTTP请求,比如常见的GET、POST请求等,这些请求都对应于axum提供的方法。
比如GET请求,这里就对应于get方法,get方法的参数是一个处理该get请求的函数,比如这里的root函数。
更多路由定义方式会在后文介绍。
定义好了路由之后,我们需要为我们的服务器绑定一个地址:
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
注意这里使用的是tokio库中的TcpListener,而不是标准库中的。
用其绑定了地址后,还需要将两者结合、应用一下:
axum::serve(listener, app).await.unwrap();
至此,我们一个最简单的服务器就搭建完成了,此时你就可以运行本程序:cargo run
并可以通过127.0.0.1:3000
这个地址,在你的浏览器访问:
因为我么的根路径get请求所对应的函数只返回了一个字符串,其默认是文本类型、而非html文档,所以这里的背景是黑色的。
至此,我们就学会了axum框架的基本用法,下面,我们开始详解axum提供的各个方面的强大功能。