Axum Server
创建项目
执行 cargo new
命令:
cargo new lr_fulltext_search_rust --bin
指定 --bin
参数用于制作二进制程序;如果制作库,可指定 --lib
参数。
或者,在已有目录里创建一个二进制 Cargo 项目:
cargo init
该命令会创建一系列初始文件,包括 Cargo.toml
文件,其主要用于追踪管理项目依赖。
添加依赖
执行 cargo add
:
cargo add axum
cargo add tokio --features full
或者,添加 axum
和 tokio
框架到 Cargo.toml:
@@ -6,3 +6,5 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+axum = "0.7.5"
+tokio = { version = "1.37.0", features = ["full"] }
更新 src/main.rs:
安装 serde_json
,用于将字符串序列化成 json:
cargo add serde_json
use axum::{routing::get, Json, Router};
use serde_json::json;
async fn welcome() -> Json<serde_json::Value> {
Json(json!({
"status": "ok"
}))
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(welcome));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
如下运行程序:
cargo run
你的服务器已经在 3000 端口跑起来了。
尝试使用 curl
命令测试 http://localhost:3000/ URL。它应该展示如下 json:
{
"status": "ok"
}
数据模型:Book
数据模型表示 API 处理的数据的结构。
创建 src/domain/model/book.rs:
形如
domain/model/...
目录结构的项目都是在使用4层架构,详情可阅读这里。
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Book {
pub title: String,
pub author: String,
pub published_at: String,
pub content: String,
}
创建兄弟文件 mod.rs 用于导出符号:
mod book;
pub use book::Book;
Loading...
> 此处输出代码运行结果