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

news2025/1/13 15:33:29

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

vscode插件Thunder Client(类似postman)
在这里插入图片描述

hello,world

建议用cargo add的方式添加

[dependencies]
axum = { version = "0.6.1", features = ["headers", "macros"] }
serde = { version = "1.0.147", features = ["derive"] }
tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] }
tower-http = { version = "0.4.0", features = ["cors"] }
use axum::{routing::get, Router};

#[tokio::main]
async fn main() {
    let app = Router::new().route("/hello", get(hello_world));

    axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
        .serve(app.into_make_service())
        .await
        .unwrap()
}

async fn hello_world() -> String {
    "Hello world!!!!!".to_owned()
}

在这里插入图片描述

routing

代码整理

不希望把逻辑都放在main
main.rs

use routing::run;

#[tokio::main]
async fn main() {
    run().await;
}

lib.rs

use axum::{routing::get, Router};

pub async  fn run(){
    let app = Router::new().route("/hello", get(hello_world));

    axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
    .serve(app.into_make_service())
    .await
    .unwrap()
}

async fn hello_world() -> String {
    "Hello world!!!!!".to_owned()
}

more separate
在这里插入图片描述
lib.rs

mod routes;
use routes::create_routes;

pub async  fn run(){
    let app = create_routes();

    axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
    .serve(app.into_make_service())
    .await
    .unwrap()
}


routes/mod.rs

use axum::{body::Body,routing::get, Router};
mod hello_world;
use hello_world::hello_world;
pub fn create_routes() -> Router<(), Body> {
    Router::new().route("/", get(hello_world))
}

routes/hello_world.rs

pub async fn hello_world() -> String {
    "Hello World from my own file".to_owned()
}

main.rs

use routing::run;

#[tokio::main]
async fn main() {
    run().await;
}

JSON

use axum::Json;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
pub struct MirrorJson {
    message: String,
}

#[derive(Serialize)]
pub struct MirrorJsonResponse {
    message: String,
    message_from_server: String,
}

pub async fn mirror_body_json(Json(body): Json<MirrorJson>) -> Json<MirrorJsonResponse> {
    Json(MirrorJsonResponse {
        message: body.message,
        message_from_server: "Hello from Axum".to_owned(),
    })
}
 

在这里插入图片描述

path variable

mod.rs

use axum::{
    body::Body,
    routing::{get,patch, post},
    Router,
};
mod hello_world;
use hello_world::hello_world;
mod mirror_body_string;
use mirror_body_string::mirror_body_string;
mod mirror_body_json;
use mirror_body_json::mirror_body_json;
mod path_variables;
use path_variables::{path_variables,hard_coded_path};
pub fn create_routes() -> Router<(), Body> {
    Router::new()
        .route("/", patch(hello_world))
        .route("/mirror_body_string", post(mirror_body_string))
        .route("/mirror_body_json", post(mirror_body_json))
        .route("/path_variables/15", get(hard_coded_path))//这个要先来,否则会被匹配到下一个去
        .route("/path_variables/:id", get(path_variables))
        

}

use axum::extract::Path;

pub async fn path_variables(Path(id): Path<i32>) -> String {
    id.to_string()
}

pub async fn hard_coded_path() -> String {
    "You got 15!".to_owned()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频压缩存储解决方案

一、背景介绍 随着视频技术的不断发展&#xff0c;人们对视频质量和存储需求的要求也越来越高。而视频文件的大小往往会给存储和传输带来诸多困扰。因此&#xff0c;如何有效地压缩视频文件成为了一个非常重要的问题。 二、压缩算法简介 有损压缩&#xff1a;通过去除视频中的…

SpringBoot3整合SpringSecurity,实现自定义接口权限过滤

接口权限过滤是指对于某些接口或功能&#xff0c;系统通过设定一定的权限规则&#xff0c;只允许经过身份认证且拥有相应权限的用户或应用程序进行访问和操作。这种技术可以有效地保护系统资源和数据安全&#xff0c;防止未授权的用户或程序进行恶意操作或非法访问。通常情况下…

广州华锐互动:智能虚拟人运用到短视频行业能带来哪些价值?

随着科学技术的不断发展&#xff0c;虚拟数字人呈现飞跃式发展&#xff0c;各式各样的虚拟数字人进入到我们的视野&#xff0c;而同样作为新风口的短视频行业&#xff0c;也成为了人们日常生活中不可或缺的一部分。那么&#xff0c;将这两者结合起来会带来哪些变化呢&#xff1…

C#开发串口调试助手实现modbusRTU通信

今天给大家搞个项目&#xff0c;跟我来&#xff0c;走过路过不要错过&#xff0c;看大V如何玩C#工业软件开发&#xff0c;搞事的目的是&#xff1a;掌握MODBUSRTU通信协议&#xff0c;掌握简单型串口调试助手开发&#xff0c;掌握串口通信过程 硬件产品&#xff1a;串口RS232温…

中移链资源管理介绍

中移链是基于EOS底层框架&#xff0c;在满足我国信息化监管需求、合规可控的前提下&#xff0c;打造的中国移动区块链服务平台。在中移链中主要包括CPU、RAM和NET三种资源。CPU资源是用于执行智能合约的计算能力&#xff0c;RAM资源用于存储智能合约和其它数据&#xff0c;NET资…

【京东API】京东app获得JD商品详情原数据接口

京东是中国最大的综合型电商网站之一&#xff0c;其app端是用户购买商品的主要途径之一。为了更好地满足用户的需求&#xff0c;开发人员提供了商品原数据接口&#xff0c;让第三方开发者可以获取京东商品的详细信息。 开发背景&#xff1a; 随着移动设备用户数量的不断增加&a…

2023最新 如何修改appstroe的开发者名称?

1、输入账号密码登录 http://itunesconnect.apple.com 2、点击app 3、点击我的账户account 4、页面往下滑动&#xff0c;点击更新信息 5、点击提供更新信息 6、根据需要修改新的信息 Hello, I want to change the company name in Chinese, according to changed to “xxx…

MySQL内存

结构 xtradb-innodb-internals-in-drawing InnoDB存储引擎体系结构 内存结构与磁盘结构 InnoDB存储结构 内存相关参数 在MySQL中&#xff0c;可以通过一些参数来控制内存的使用和管理。以下是一些常用的控制内存的参数&#xff1a; innodb_buffer_pool_size: 这是控制InnoD…

商场室内导航制作,商场导览图怎么做的?

商场导览图怎么做的&#xff1f;现在很多商场都比较大&#xff0c;往往需要借助地图才能快速找到想要去的店铺&#xff0c;比如在商场大厅展示商场楼层规划以及楼层具体商户等&#xff0c;让消费者了解商场的整体结构&#xff0c;有逛下去的欲望。重点标记出逃生通道、厕所、进…

是时候搭建一个自己的ChatGPT 了!

ChatGPT客户端-ChatBox https://github.com/Bin-Huang/chatbox 开源的 ChatGPT API (OpenAI API) 跨平台桌面客户端&#xff0c;Prompt 的调试与管理工具&#xff0c;也可以用作 ChatGPT Plus 平替。 如需找不到下载地址&#xff0c;可以私信留言。 ChatGPT Next Web https…

MySQL 自增列使用上的一些 “坑”

文章目录 前言1. 自增列空洞1.1 手动指定2.2 分配未使用 2. 自增列监控2.1 sys 库监控2.2 通用查询 3. 一些 BUG3.1 重启失效3.2 冲突问题 前言 MySQL 的规范中&#xff0c;一般都会建议表要有主键&#xff0c;常使用自增列作为主键字段&#xff0c;这和 MySQL 属于聚簇索引表…

【FlatpanelsHD】HDR生态系统追踪器

Dolby Vision被称为Profile 8.4&#xff0c;与基于pq(杜比实验室开发的感知量化技术&#xff0c;也是无处不在的HDR10的基础)的所有其他口味不同&#xff0c;它基于HLG或Hybrid Log Gamma&#xff0c;由BBC和NHK开发&#xff0c;主要用于电视直播。 用HLG捕捉HDR视频的相机并不…

选择自动化测试工具的主要考虑点是什么?

在软件开发生命周期中&#xff0c;测试是非常重要的一部分。测试的目的是确保软件系统的质量和可靠性。而随着软件开发越来越复杂&#xff0c;传统的手动测试方式已经无法满足测试的要求。自动化测试工具的出现就为测试工作提供了更高效、更准确的解决方案&#xff0c;那选择自…

基于AT89C51单片机的6位电子密码锁详细设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87855657?spm=1001.2014.3001.5503 源码获取 目录 1绪论 1 1.1 课题背景 1 1.2 课题设计目标 1 2系统方案论证 2 2.1 主控部分的选择 2 2.2 密码输入方式的选择 2 3 系统总体…

day8 -- 全文本搜索

brief InnoDB存储引擎从MySQL 5.6开始支持全文本搜索。具体来说&#xff0c;MySQL使用InnoDB存储引擎的全文本搜索功能称为InnoDB全文本搜索&#xff08;InnoDB Full-Text Search&#xff09;。InnoDB全文本搜索支持标准的全文本搜索查询语法和多语言分词器&#xff0c;因此可…

useCallback使用注意

背景 useCallback的作用时基于依赖项缓存函数&#xff0c;但是这个缓存时取值缓存而不是按照地址缓存&#xff0c;这导致了如果缓存的函数使用的值依赖外部某个变量&#xff0c;这个变量只会取第一次用到的值 例子 具体可以看https://codesandbox.io/s/misty-night-vds9oo?…

JavaScript:箭头函数与普通函数的区别与适用场景

文章目录 1 箭头函数与普通函数的区别1.1 语法上的区别1.2 this指向的区别1.3 arguments对象的区别1.4 箭头函数不能用作构造函数 2 箭头函数和普通函数的适用场景2.1 普通函数的适用场景2.1.1 构造函数2.1.2 方法2.1.3 回调函数 2.2 箭头函数的适用场景2.2.1 简答的回调函数2.…

IIS配置URL重写,http重定向https

文章目录 1️⃣ URL重写1.1 URL重写插件下载1.2 URL重写插件安装1.3 URL重写插件配置 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/131004077 IIS配置URL重写&#xff0c;http重定向https&#xff0c;ht…

【计算机图形学】【代码复现】A-SDF中的数据集制作与数据生成

Follow A-SDF 的Data Generation部分&#xff1a; We follow (1) ANSCH to create URDF for shape2motion dataset (1-2) URDF2OBJ&#xff08;本人认为是1-2之间需要进行的重要的过渡部分&#xff09; (2) Manifold to create watertight meshes (3) and modified mesh_to_sdf…

CPLEX Studio 集成开发环境 (IDE) 介绍

CPLEX Studio 集成开发环境 (IDE) 介绍 参考B站视频&#xff1a;cplex入门到精通 1.CPLEX Studio IDE 实现的功能 IBM ILOG CPLEX Studio IDE 是一个用于数学规划、约束规划以及一般组合优化应用程序的集成开发环境。 它是适用于 OPL&#xff08;优化编程语言&#xff09;和…