基于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的基本使用相关推荐

  1. 基于Django的web开发(一)

    基于Django的web开发(一) 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 基于Django的web开发(一) 一.Django的安装及基本介绍 一. ...

  2. 绝对干货:19个有用的基于云的Web开发工具

    随着Web开发行业的快速发展,许多Web工具似乎简化了创建基于Web的应用程序的过程,并帮助开发人员更快的掌握. 在提供的众多工具中,有一些值得指出. Web开发人员的在线游乐场 Web应用程序开发包 ...

  3. java servlet 开发_Java之基于Servlet的Web开发简介

    由于学习的过程中,接触到了这部分内容,所以特别的在这进行整理,分享给大家. 1.定义 Servlet是Java Servlet的简称,称为小服务程序或服务连接器: 2.原理 从原理上讲,Servlet ...

  4. 基于pfw的web开发平台使用指南

    1.平台概述 此部分目的:主要包括平台的说明, 一般应用页面的整体框架说明, 以及平台开发的内容与页面内容的对应关系等. 使开发人员知道做下面一系列工作的意义. 一般页面主成:上面是菜单(menu), ...

  5. 基于hi-nginx的web开发(python篇)——路由装饰器

    现在,有了起步的基本认识,现在需要一个可以媲美flask或者bottle的简洁易用的路由功能,可以用装饰器写法任意映射 URLs 到代码. 这个,并不难.首先,来一个叫做hi的模块:hi.py: 1 ...

  6. 基于hi-nginx的web开发(python篇)——动态路由和请求方法

    hi.py 的提供的路由装饰器接受两个参数,第一个参数指定动态路由的正则模式,第二个参数指定同意的http请求方法列表. 比如: 1 @app.route(r"^/client/?$&quo ...

  7. 基于hi-nginx的web开发(python篇)——utf-8编码

    一致地utf-8编码,非常重要.对python2而言,尤其如此. 如果在hi-nginx中使用的是python2,同时又需要无障碍地使用中日韩等文字,那么一定不要忘记使用: #-*- coding:u ...

  8. 基于hi-nginx的web开发(python篇)——cookie和会话管理

    hi-nginx通过redis管理会话. 要开启管理,需要做三件事. 第一件开启userid: userid on; userid_name SESSIONID; userid_domain loca ...

  9. 基于HTML5移动web应用

    一.基于HTML5移动web应用 1.canvas 绘图 2.多媒体 3.本地存储 4.离线应用 5.使用地理位置 6.移动web框架 二.具体说明 1.HTML5标准最大的变化就是支持Web绘图功能 ...

最新文章

  1. Java String split 使用详解、split 方法存在的一些坑
  2. sv队列和动态数组的区别_systemverilog学习(4)动态数组
  3. html课做一个网页,菜鸟自学建站 HTML 第三课 制作我的第一个网页_html/css_WEB-ITnose...
  4. 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
  5. 兰州大学计算机调剂2020,兰州大学2020考研调剂公告
  6. 大数据之-Hadoop3.x_MapReduce_排序概述---大数据之hadoop3.x工作笔记0114
  7. 薪资被倒挂?是怒刷 LeetCode,还是另寻他路?
  8. [GCN] 图卷积知识梳理 -持续更新
  9. CSS:前端布局——网格布局Grid
  10. javascript的window.open()具体解释
  11. STC单片机程序下载实战
  12. 生产制造业如何谋求数字化转型?需要哪些信息化系统做支撑?
  13. 微信公众平台接口调试工具json格式不对怎么搞_微信支付、支付宝最全接入指引,看完立刻就可以上手!...
  14. “Adb connection Error:远程主机强迫关闭了一个现有的连接。”的解决方法
  15. 矩阵 的逆、 迹、 秩
  16. EasyExcel web下载excel,多sheet页demo
  17. Python学习之路36-使用future处理并发
  18. 2019上海埃森哲软件开发面试
  19. 闲人闲谈PS之十七——系统切换带来的冲击
  20. 【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)

热门文章

  1. Flask 重定向、错误和消息闪现
  2. Jmeter手把手教入门详细步骤,包括使用Jmeter进行Web,java模块测试
  3. 经典查询练手第四篇(不懂装懂,永世饭桶!)
  4. 网络工程实训综合测验(eNSP)
  5. 诚之和:三只松鼠走到十字路口
  6. shutdown、shutdownNow方法的理解
  7. 2290亿美元,卡塔尔世界杯中国和卡塔尔 都赢了
  8. 深圳Java培训:WebService的简单使用
  9. 搜狗微信反爬虫,让自媒体内容更安全
  10. 【书评】人月不必再相望,嫦娥已然在身旁——人月神话(40周年纪念版)