【Rust实战】Axum + Nextjs 前后端全栈开发04:设计路由

3.Rust + Axum 提取器模式深度剖析 深入解读 Rust + Axum 提取器模式,涵盖内置提取器及自定义实现。有时候,内置提取器可能无法满足我们的需求,我们需要自定义提取器来实现更复杂的请求数据验证。例如,我们希望对用户输入的邮箱地址进行格式验证。})?;format!在这个示例中,我们定义了一个结构体,并使用validator库对邮箱地址进行格式验证。然后,我们自定义了一个提取器,在方法中,首先使用Json提取器提取请求体中的 JSON 数据,然后对数据进行验证。如果验证失败,返回一个包含错误信息的响应; 阅读详情

新建路由库

创建一个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路由,规范化的定义和管理,嵌套,以及未定义路由的处理。,关于具体的实现我们并没有完成。这个我们在后续的具体开发中再来填充完善。

Rust Axum 快速上手指南(静态网页和动态网页2024版) 本文介绍了基于Axum 0.7.5框架的Web应用开发实践,重点讲解了tower-http中间件、静态文件服务和MiniJinja模板引擎的集成使用。文章首先说明了环境配置和依赖管理,然后详细解析了Layer中间件的"洋葱模型"执行原理及生产环境中的层叠顺序优化策略。在静态文件服务部分,介绍了ServeDir的使用方法和404页面定制技巧。对于动态页面渲染,则完整演示了MiniJinja模板引擎的配置、模板继承机制和上下文数据传递方法。最后,文章提供了一个综合示例,整合了所有功能模块,并 阅读详情

相关推荐

【Rust实战】Axum + Nextjs 前后端全栈开发01:介绍

Rust实战

编程不止 1541

【从零开始的rust web开发之路 一】axum学习使用

目前rust 语言web开发相关的框架已经有很多,但还是和java,go语言比不了。这个系列想完整走一遍web开发,后续有时间就出orm,还有一些别的web用到的库教程。言归正传,开始学习axum框架Axum是一个专注于人体工程学和模块化的Web应用程序框架。

爱音乐的程序猿的博客 7801

Rust Web开发指南 第二章(Axum 路由与参数处理)

本文介绍了如何使用Rust框架Axum构建HTTP服务,重点讲解了路由系统与参数处理机制。主要内容包括:1. 基础路由配置和模块化路由嵌套实现;2. 路径参数处理(单段参数和通配符参数);3. 查询字符串参数提取(动态HashMap和固定结构体);4. 代码模块化组织与优雅关闭实现。通过逐步扩展示例,展示了如何从简单路由到支持多场景参数处理的完整服务开发过程,并提供了功能测试方法和核心要点总结。文章强调Axum的低资源消耗、高性能特性,以及其灵活的参数提取机制对开发效率的提升。

北京锋通科技有限公司的技术blog 2303

Axum: Rust 好用的 Web 框架

Axum 凭借其类型安全、无宏入侵、高性能的特性,成为 Rust Web 开发的首选框架

码刀攻城 2254

第十九章 rust服务器开发:axum框架详解

因为rust拥有着极高的性能,加上tokio这个非常优秀的运行时,这使得rust很适合被用于开发服务器。目前rust已经拥有了众多的web框架,例如rocket、axum、axtix-web、tide、warp等等。而axum这个web框架是由tokio团队所维护的,相对来说,可能在某些方面更加专业,所以本文也将以axum框架来介绍rust的web框架开发。也就是链式调用,get方法的返回值可以继续调用其上的post方法,传入post方法的处理函数。

余识- 2812

新英格兰10机39节点matlab建模,ieee10机39节点系统数据

【实例简介】ieee10机39节点系统数据,主要是BPA数据!【实例截图】【核心代码】ne_039_bus└── ne_039_bus├── 039readme.doc├── bpa│ ├── 039bpa.dat│ ├── 039bpa.swi│ ├── LFerr.LIS│ ├── OneNote 目录.onetoc2│ └── STERR.LIS├── eurostag│...

weixin_39851809的博客 3273

【Rust实战】Axum + Nextjs 前后端全栈开发03:集成Axum

【Rust实战】Axum + Nextjs 前后端全栈开发03:集成Axum

编程不止 539

触摸开关原理图_反激式开关电源PCB设计要点

由于最近工作中经常用到反激开关电源,就顺便做个有关反激电源PCB Layout方面的简单总结。关于变压器和补偿环路的设计原理和方法,可以参考之前的文章,链接如下:电子小白菜:反激电源变压器设计篇之详细设计步骤​zhuanlan.zhihu.com电子小白菜:反激电源变压器设计篇之基础原理​zhuanlan.zhihu.com电子小白菜:【干货分享】开关电源环路补偿设计步骤讲解​zhuanlan.z...

weixin_39574868的博客 1155

Next.JS环境搭建,对接Rust的RESTful API

├── app/ # 页面与路由目录│ ├── page.tsx # 首页│ ├── layout.tsx # 页面布局│ └── globals.css # 全局样式├── public/ # 静态文件├── next.config.mjs # Next.js 配置├── tsconfig.json # TypeScript 配置└── tailwind.config.ts # 若启用 Tailwind。

Theoweb3|优快云 wwh1st|GitHub theoweb3|TG theo_liu|X theoweb33|gmail wwh9th 华语区Web3基础设施建设者;Web3开源社区共建者;博客沉淀去中心化等各类工程经验。 1274

STM32H743+YT8512C以太网通信实战:CubeMX与LWIP配置详解

本文详细解析了基于STM32H743微控制器与YT8512C PHY芯片的以太网通信实战方案。通过CubeMX工具进行RMII接口、MPU、时钟树等关键硬件配置,并重点阐述了如何修改LWIP协议栈驱动代码以适配YT8512C芯片,解决了LAN8742驱动不兼容的问题。文章提供了从工程创建、代码适配到调试验证的完整步骤,帮助开发者快速实现稳定可靠的嵌入式网络连接。

weixin_29190573的博客 558

DESeq2实战:利用LRT检验解析时间序列基因表达动态变化

本文详细介绍了如何使用DESeq2中的LRT检验分析时间序列基因表达数据,揭示基因表达动态变化模式。通过构建完整模型与简化模型比较,LRT检验能有效识别处理效应随时间变化的基因,适用于发育过程、疾病进展等研究。文章提供了从数据准备、模型构建到结果可视化的完整实战指南,并分享了高级技巧与常见问题排查方法。

weixin_29062671的博客 439

Rust异步Web框架Axum的深入原理与高级用法

Axum是一个基于Tokio的Rust异步Web框架,采用模块化设计理念,强调类型安全和异步优先。其核心组件包括请求提取器(从HTTP请求中提取数据)、响应映射器(转换处理函数结果为HTTP响应)和中间件(处理请求/响应通用逻辑)。框架提供内置功能并支持自定义扩展,如自定义提取器、响应格式和中间件(如日志记录)。通过Router组织路由,Axum实现了灵活高效的Web服务开发,同时保持代码简洁性和类型安全性。

编程世界如山海,探索不止。 2万+

VMware Ubuntu虚拟机突然断网?我用5步彻底解决了(附避坑指南)

Ubuntu虚拟机断网问题通常由网络配置冲突和VMware服务未正确绑定导致。本文提供5步解决方案:1)清理Ubuntu重复有线连接;2)重启Windows主机的VMware服务;3)检查VMware虚拟网络配置;4)重新配置Ubuntu网络参数;5)测试网络连通性。关键避坑点包括:避免多连接共存、修改配置后必重启服务、确保虚拟网卡绑定主机。通过"网卡状态→IP/路由→网关→服务"的排查思路,可快速解决虚拟机网络故障。文末附有详细的故障症状对照表,便于快速定位问题。

m0_58530495的博客 626

Rust - axum(01)分离路由模块

网上有很多axum框架的教程,但是都不是那么详细,根据业务的需求,准备把原有的分布式更换成以Rust axum 的web微服务,认真记录当前的每一步拆解,供朋友们交流和学习。

stark张宇 4485

sam3.1 部署笔记 推理封装

sam3.1 部署笔记

jacke121的专栏 422

【YOLO目标检测全栈实战】68 模型量化:从FP32到INT8,精度不掉,速度翻倍

摘要: 模型量化能显著提升推理速度(如YOLOv5s帧率从15FPS提升至38FPS),但需避免三大误区:1)校准集需覆盖实际场景,而非随机采样;2)敏感层(如检测头)应保留FP32精度;3)预处理必须与量化前后一致。通过混合精度量化(Backbone用INT8,检测头用FP32)和逐通道量化,可实现<1%的mAP损失。关键步骤包括校准数据准备、量化感知训练及逐层精度评估,最终在Jetson Nano等边缘设备上实现速度与精度的平衡。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 145

【Axum】Rust Web 高效构建:Axum 框架从入门到精通指南

本文介绍了如何使用Rust的Axum框架构建高性能RESTful API服务。主要内容包括: 环境准备与项目创建 安装Rust工具链 添加Axum及相关依赖(Tokio、SQLx、Serde等) 项目架构设计 分层架构(路由→中间件→处理器→服务层→数据访问层) 模块化项目结构设计 核心功能实现 数据库连接池配置 用户模型定义(包含认证相关字段) 路由配置(用户和认证路由) JWT认证服务实现(密码哈希、令牌生成与验证) 关键技术点 异步处理(Tokio运行时) 数据库集成(SQLx) 认证授权(JWT)

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 3349

FreeRTOS全攻略:从入门到精通

本文聚焦 FreeRTOS,从基础概念出发,阐述其开源、轻量级等优势。着重介绍 FreeRTOS 入门知识,涵盖内存管理、任务操作、同步互斥机制等核心内容。其中,空闲任务与钩子函数保障系统基础运行与功能扩展;队列、信号量、互斥锁和事件组等机制,分别从数据传递、资源访问控制、优先级问题解决及多任务同步等方面,为开发者提供高效的任务间协作与资源管理方案,助力开发者掌握 FreeRTOS 核心技术,为嵌入式项目开发筑牢基础。

邓邓子的博客 6355

使用rust axum创建我们的第一个web服务

在cargo.toml引入axum的库和tokio库。使用浏览器访问127.0.0.1:3000。在src目录下的main.rs中编写代码。创建我们的rust项目。

若梦网络编程 1090

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【从零开始的rust web开发之路 二】axum中间件和共享状态使用

上篇文件讲了路由和参数相应相关的。axum还有个关键的地方是中间件的使用,这篇文件就来说说。想要自定义中间件,这里介绍两种axum原生的方法一种是axum::middleware::from_fn举个例子Router,///自定义中间件方法// 对请求做一些处理//......//调用下一个中间价//......// 对响应做一些处理,返回响应response//这里使用中间件还有一种方法是axum::middleware::from_extractor举个例子。

爱音乐的程序猿的博客 5510

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Rust 全栈开发最好的框架是哪一个?深度对比 Leptos、Yew、Axum 与 Tauri

过去十年,Rust 从系统语言一步步成长为现代开发生态的重要力量。而现在,Rust 已不再局限于“写系统底层”或“高性能后端”。它正在成为一种全栈语言——既能写后端服务、命令行工具,也能编译成运行在前端,甚至能构建跨平台桌面应用。于是一个问题越来越多地被问到:“Rust 做全栈,哪个框架最好?出发,对比它们在性能、生态、易用性、全栈整合能力等方面的表现,帮你找出最值得投入学习的框架。Rust 正在成为“系统安全 + 全栈性能”的代名词。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 3357

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Rust学习】web框架 Axum,提供REST API

cargo-watch:有修改就重启服务器,类似java web的热部署安装:cargo install cargo-watch使用:cargo watch -x run这样每次有修改就会自动重启web服务vscode插件Thunder Client(类似postman)

sonichenn的博客 2012

5 分钟搭好开发环境:Rust + Axum 项目从零开始

从 Rust 工具链安装到启动第一个 Axum Web 服务,手把手教学。涵盖 Cargo.toml 依赖配置、Router/Extractor/Middleware/State 四大核心概念、项目分层架构设计、cargo-watch 热加载开发,附完整可运行代码。

weixin_42840030的博客 367

Rust Web框架Axum实战:构建高性能HTTP服务

高性能:利用Rust的异步能力和零成本抽象类型安全:编译时检查确保API正确性模块化:灵活的中间件系统和路由设计Router,whereB: Send,.headers()format!Router,responseheaders,Axum基础:项目初始化、路由定义、处理器函数提取器:路径参数、查询参数、请求体、自定义提取器中间件:日志中间件、错误处理、认证中间件响应处理:JSON响应、自定义响应、文件响应状态管理:应用状态、共享状态实战案例。

no1coder的博客 4585

Rust Web框架Axum学习指南之入门初体验

Rust Axum框架入门指南

学习和工作总结,共勉! 749

初学者的Axum框架教程:拥抱Rust的Web开发新纪元

初学者的Axum框架教程:拥抱Rust的Web开发新纪元 在如今的编程世界中,Rust以其高性能和内存安全性而备受赞誉。对于Web开发者来说,Axum框架的出现,让我们有机会利用Rust的强大来构建高效且易维护的Web应用程序。这篇教程将引导你逐步踏入Axum的世界,无论你是Rust新手还是有经验的开发者,都将找到适合自己的起点。 1. 项目介绍 Axum Tutorial For Beginne...

gitblog_00015的博客 946
上一篇: 【Rust实战】Axum + Nextjs 前后端全栈开发03:集成Axum
SunsJay
博客等级 码龄6年 95粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值