基于Rust的Web开发,actix的基本使用

本文介绍了如何使用Rust的Actix框架进行Web开发,包括环境搭建、基础使用、URL路径参数、GET和POST请求参数传递。示例代码展示了从创建HTTP服务器到处理各种请求的方法,特别强调了Actix对中文字符的良好支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rust-web

Rust语言开发的web系统,常见的web框架主要有:Rocket(必须使用Rust nightly版本)、Actix、Yew(结合WebAssembly使用较好)、Warp等

这里不对以上框架做优缺点比较,因为自己涉猎也比较浅,所以不知道,则不评价,仅仅是因为自己会简单使用Actix,所以这里对Rust中使用Actix做简单分享。

环境搭建

首先,需要引入相关依赖

actix-web = "4"
env_logger = "0.9"
serde = {version = "1.0",features = ["derive"]}

这里指定serde的版本和特性,是因为在Rust高版本中需要用到,否则在使用结构体序列化时候,会编译报错(如下图):

在这里插入图片描述
那么接下来就是直接使用了,Actix提供了简单的开箱即用的一些方法,便于直接构建一个web项目。下面是简单的代码示例:

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    std::env::set_var("RUST_LOG", "actix_web=info");
    env_logger::init();
    HttpServer::new(|| {
        App::new()
            .wrap(middleware::Logger::default())
            .service(web::resource("/hello").to(index))
    })
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}

这里需要把main函数设置为异步的,前面2行代码是基本的日志打印相关设置。

主要这里直接new了一个HttpServer实例,绑定在了本机的8080端口上,然后运行等待。

创建HttpServer实例,传入一个无参闭包

闭包函数创建了APP实例,并监听了/hello服务,同时将这个/hello服务,指定index服务函数处理

这里贴出来index函数处理/hello服务:

/*无参请求*/
async fn index(req: HttpRequest) -> &'static str {
    println!("REQ:{req:?}");
    "hello world"
}

处理该请求,打印了请求的一些信息,同时返回了字符串“hello world”

启动main函数,监听localhost的8080端口开始,调用http://localhost:8080/hello,将得到以下结果:

在这里插入图片描述

url路径参数传递

这里简单举例类似/XXX/{param},url连接get请求参数传递方式

开启一个新的service监听服务:

.service(web::resource("/getByInput/{name}").to(return_result))

定义return_result函数

/*url带参数请求 /getByInput/{2323} */
async fn return_result(str: web::Path<String>, req: HttpRequest) -> impl Responder {
    println!("REQ:{req:?}");
    format!("Hello {}!", str)
}

参数以为web::Path类型作为后台接收

运行效果:

在这里插入图片描述
这里非常喜欢Actix对于中文字符的处理,即使用的时候,不需要添加多余的处理方式,轻松得到没有乱码的数据。

get请求参数传递

添加一个新的服务监听:

.service(web::resource("/getReq").route(web::get().to(get_return)))

这里用web::get(),明确指定了请求/getReq为get请求,以其他方式的调用,均是不允许的

同时需要创建一个结构体,用于接收参数

#[derive(Serialize,Deserialize)]
struct Param {
    name: String,
    password: String,
}

上面结构体Param指定自定义序列化宏,是因为Actix中接收参数必须使用。
定义get_return函数

/*get带参数请求 /getReq?name=依荨&password=123456 */
async fn get_return(param : web ::Query<Param>
                    ,req:HttpRequest) -> impl Responder {
    println!("REQ:{req:?}");
    format!("Your name is {},and Your password is {}", param.name,param.password)
}

运行效果:

在这里插入图片描述

post请求表单参数传递

运行效果:

在这里插入图片描述

post请求Json参数传递

运行效果:

在这里插入图片描述

这里省略的内容,请关注“依荨”,H(回)F(复) Actix,get all content

有Rust入门学习笔记,轻轻松松学习Rust

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值