Axum 是由 Tokio 官方团队开发的一个高性能、设计优雅的现代化 Web 框架。
为什么选择Axum?
Tokio 是 Rust 社区中最流行的异步编程框架之一(在区块链和智能合约圈子比较受欢迎),而Axum是由Tokio官方开发、且深度集成的Web框架。
快速使用
假设已经安装了Rust开发环境
1 | // main.rs |
1 | $ curl -X GET 'http://127.0.0.1:8000' |
进阶使用
登录场景的需求,如下实现
1 | // main.rs |
1 | $ curl -X POST 'http://127.0.0.1:8000/auth/login' -H 'Content-Type: application/json' -d '{"user":"mark","password":"123456"}' |
JWT
Web项目一般会采用JSON-Web-Token(JWT)来做鉴权,进行如下修改
1 | // jwt.rs |
1 | // main.rs |
1 | $ curl -X POST 'http://127.0.0.1:8000/auth/login' -H 'Content-Type: application/json' -d '{"user":"mark","password":"123456"}' |
IntoResponse
有时需要对Resp返回包体结构进行修改,这样实现
1 | // response.rs |
1 | // main.rs |
1 | $ curl -X POST "http://127.0.0.1:8000/auth/login" -H 'Content-Type: application/json' -d '{"user":"mark","password":"123456"}' |
Extensions
生成了JWT Token之后如何实现鉴权呢?
1 | // jwt_auth.rs |
1 | // main.rs |
1 | $ curl -X GET "http://127.0.0.1:8000/auth/me" |
Extractor
如果希望在请求中能够获取登录用户,还可以这样做
1 | // model.rs |
1 | // extract.rs |
1 | // jwt_auth.rs |
1 | // main.rs |
1 | $ curl -X GET "http://127.0.0.1:8000/auth/me" -H 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtYXJrIiwiaWF0IjoxNzc4NjQ2Njg4LCJleHAiOjE3ODEyMzg2ODgsImlzcyI6Imp3dF9pc3N1ZXIifQ.vzj_ExYeqBL9rrjqGiMWn0ywbp38PrrBy8H2q1Z40oQ' |
最后
Axum简单使用的example,涉及Service + Layer、Extractor等核心和关键特性后续会展开深入学习。