基于Rust的Web开发,actix的基本使用
基于Rust的Web开发,actix的基本使用
- rust-web
- 环境搭建
- url路径参数传递
- get请求参数传递
- post请求表单参数传递
- post请求Json参数传递
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
基于Rust的Web开发,actix的基本使用相关推荐
- 基于Django的web开发(一)
基于Django的web开发(一) 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 基于Django的web开发(一) 一.Django的安装及基本介绍 一. ...
- 绝对干货:19个有用的基于云的Web开发工具
随着Web开发行业的快速发展,许多Web工具似乎简化了创建基于Web的应用程序的过程,并帮助开发人员更快的掌握. 在提供的众多工具中,有一些值得指出. Web开发人员的在线游乐场 Web应用程序开发包 ...
- java servlet 开发_Java之基于Servlet的Web开发简介
由于学习的过程中,接触到了这部分内容,所以特别的在这进行整理,分享给大家. 1.定义 Servlet是Java Servlet的简称,称为小服务程序或服务连接器: 2.原理 从原理上讲,Servlet ...
- 基于pfw的web开发平台使用指南
1.平台概述 此部分目的:主要包括平台的说明, 一般应用页面的整体框架说明, 以及平台开发的内容与页面内容的对应关系等. 使开发人员知道做下面一系列工作的意义. 一般页面主成:上面是菜单(menu), ...
- 基于hi-nginx的web开发(python篇)——路由装饰器
现在,有了起步的基本认识,现在需要一个可以媲美flask或者bottle的简洁易用的路由功能,可以用装饰器写法任意映射 URLs 到代码. 这个,并不难.首先,来一个叫做hi的模块:hi.py: 1 ...
- 基于hi-nginx的web开发(python篇)——动态路由和请求方法
hi.py 的提供的路由装饰器接受两个参数,第一个参数指定动态路由的正则模式,第二个参数指定同意的http请求方法列表. 比如: 1 @app.route(r"^/client/?$&quo ...
- 基于hi-nginx的web开发(python篇)——utf-8编码
一致地utf-8编码,非常重要.对python2而言,尤其如此. 如果在hi-nginx中使用的是python2,同时又需要无障碍地使用中日韩等文字,那么一定不要忘记使用: #-*- coding:u ...
- 基于hi-nginx的web开发(python篇)——cookie和会话管理
hi-nginx通过redis管理会话. 要开启管理,需要做三件事. 第一件开启userid: userid on; userid_name SESSIONID; userid_domain loca ...
- 基于HTML5移动web应用
一.基于HTML5移动web应用 1.canvas 绘图 2.多媒体 3.本地存储 4.离线应用 5.使用地理位置 6.移动web框架 二.具体说明 1.HTML5标准最大的变化就是支持Web绘图功能 ...
最新文章
- Java String split 使用详解、split 方法存在的一些坑
- sv队列和动态数组的区别_systemverilog学习(4)动态数组
- html课做一个网页,菜鸟自学建站 HTML 第三课 制作我的第一个网页_html/css_WEB-ITnose...
- 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
- 兰州大学计算机调剂2020,兰州大学2020考研调剂公告
- 大数据之-Hadoop3.x_MapReduce_排序概述---大数据之hadoop3.x工作笔记0114
- 薪资被倒挂?是怒刷 LeetCode,还是另寻他路?
- [GCN] 图卷积知识梳理 -持续更新
- CSS:前端布局——网格布局Grid
- javascript的window.open()具体解释
- STC单片机程序下载实战
- 生产制造业如何谋求数字化转型?需要哪些信息化系统做支撑?
- 微信公众平台接口调试工具json格式不对怎么搞_微信支付、支付宝最全接入指引,看完立刻就可以上手!...
- “Adb connection Error:远程主机强迫关闭了一个现有的连接。”的解决方法
- 矩阵 的逆、 迹、 秩
- EasyExcel web下载excel,多sheet页demo
- Python学习之路36-使用future处理并发
- 2019上海埃森哲软件开发面试
- 闲人闲谈PS之十七——系统切换带来的冲击
- 【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)