新建路由库
创建一个route库
项目中跟路由相关的一些操作代码都放在这个库,方便后续进行管理。
cargo new --lib route
添加依赖
route/src/Cargo.toml
[package]
name = "route"
version = "0.1.0"
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"] }
调整路由相关代码
route/src/lib.rs
use axum::{routing::get, Router};
pub fn route() -> Router {
Router::new().route("/", get(|| async { "Hello, World!" }))
}
backend/Cargo.toml
workspace = { members = ["route"] }
[package]
name = "axum-next-app"
version = "0.1.0"
edition = "2021"
authors = ["SunsJay <sunsjay0806@gmail.com>"]
keywords = ["axum", "web", "database"]
license = "MIT"
[[bin]]
name = "axum-next-app"
path = "main.rs"
[dependencies]
toml = "0.8"
serde = { version = "1.0", features = ["derive"] }
axum = "0.7.5"
tokio = { version = "1.37.0", features = ["full"] }
route = { path = "route" }
backend/main.rs
use route::route;
#[tokio::main]
async fn main() {
println!("🚀 Axum - NextJS - App v1.0");
println!("🧓 SunsJay <sunsjay0806@gmail.com>");
let app = route();
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
运行
测试
版本管理
运行和测试没有问题后,我们使用git来进行提交。后续我们使用git-flow
来进行开发管理。
Git Flow
Git-flow是一种Git分支管理模型,旨在简化发布管理。它由软件开发人员Vincent Driessen于2010年引入。Git-flow定义了不同类型的Git分支,以及它们之间的交互关系。该工作流适用于任何大小的团队,特别适用于需要定期发布软件的团队。Git-flow涉及以下五种分支类型:Main、Develop、Feature、Release和Hotfix。通过这些分支,团队可以更有效地管理功能、bug修复和发布。Git-flow的核心概念包括主分支(Main)、开发分支(Develop)、功能分支(Feature)、热修复分支(Hotfix)和发布分支(Release)。通过这些分支,团队可以更有条理地管理代码的开发、测试和发布过程。
初始化
git flow init
新增feature
git flow feature start route
添加对其他未定义路由的处理
axum
有定义好的成员函数fallback
,我们只需要调用,并定义当没有路由与传入的请求匹配时,我们该如何处理该请求。
我们返回404代码,并返回Not Found
内容。
backend/route/src/lib.rs
use axum::http::StatusCode;
use axum::{routing::get, Router};
pub fn route() -> Router {
Router::new()
.route("/", get(|| async { "Hello, World!" }))
.fallback(fallback)
}
pub async fn fallback() -> (StatusCode, &'static str) {
(StatusCode::NOT_FOUND, "Not Found")
}
backend/main.rs
use route::route;
#[tokio::main]
async fn main() {
println!("🚀 Axum - NextJS - App v1.0");
println!("🧓 SunsJay <sunsjay0806@gmail.com>");
let app = route();
// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
match tokio::net::TcpListener::bind("0.0.0.0:3000").await {
Ok(listener) => axum::serve(listener, app).await.unwrap(),
Err(e) => {
println!("{}", e);
}
}
}
运行
成功编译并运行
测试
除了\
路由其他请求都是404
版本管理
某一个功能编写完成并测试通过就可以提交一次更新。
重构优化
基本功能我们实现了,但是我们可以继续进行一些重构优化。使项目的可读性,易维护性,结构合理性更好。
RESTful API
RESTful API(Representational State Transfer API)是一种符合REST架构风格的应用程序接口(API)。它通过使用HTTP请求来访问和使用数据,支持对资源进行读取(GET)、更新(PUT)、创建(POST)和删除(DELETE)等操作。RESTful API基于REST架构风格,是一种常用的Web服务开发方法,也被称为RESTful Web服务或REST API。RESTful API的设计原则包括统一接口、无状态性、分层系统、可缓存性和可选的代码请求等特点。通过RESTful API,客户端可以与服务器进行交互,请求资源并获取服务器返回的表示形式,实现数据交换和操作的目的。
backend/route/src/lib.rs
use axum::http::StatusCode;
use axum::{routing::get, Router};
pub fn route() -> Router {
let user_routes = Router::new().route("/:id", get(|| async { "User" }));
let api_routes = Router::new()
.nest("/users", user_routes);
Router::new().route("/", get(|| async { "Hello, World!" })).nest("/v1/api", api_routes).fallback(fallback)
}
pub async fn fallback() -> (StatusCode, &'static str) {
(StatusCode::NOT_FOUND, "Not Found")
}
运行测试
版本管理
git-flow features finish route
git switch main
git merge develop
简单的用户增删改查
我们接下来进行一个简单的用户增删改查路由的设计,里面的功能我们目前不进行填充,只是进行搭建框架。
新建一个开发分支
git-flow feature start route/users
为user路由添加增删改查的方法
use axum::http::StatusCode;
use axum::Router;
use axum::routing::{delete, get, put, post};
pub fn route() -> Router {
let user_routes = Router::new().route("/:id", get(|| async { "Get User" }).delete(|| async { "Delete User" }).post(|| async { "Post User" }).put("Put User"));
let api_routes = Router::new()
.nest("/users", user_routes);
Router::new().route("/", get(|| async { "Hello, World!" })).nest("/v1/api", api_routes).fallback(fallback)
}
pub async fn fallback() -> (StatusCode, &'static str) {
(StatusCode::NOT_FOUND, "Not Found")
}
运行测试
版本管理
git-flow feature finish route/users
git swith main
git metge develop
总结
这一章节主要是介绍如何设计使用Axum路由,规范化的定义和管理,嵌套,以及未定义路由的处理。,关于具体的实现我们并没有完成。这个我们在后续的具体开发中再来填充完善。