warp web框架初体验

最近学习rust基本语法之后,想体验一下rust在web开发领域的魅力,顺便去了解了一些web框架。
发现github上有很多rust写的框架,而且人气还不错,随便去下载和稍微学习了一下他们的基本用法和demo体验,最终还是选择了我自己认为最好上手的一款很低调的web框架【warp】进行学习。
warp是基于hyper和tokio基础上,实现的多线程异步web框架。

warp框架 github地址:
github.com/seanmonstar/warp

目录分层:

简单分了3层

  • 控制器
  • 数据库操作
  • 路由定义和登录
    warp web框架初体验

main函数

use  std::sync::{Arc, Mutex};
use  log::info;
mod  controllers;
mod  models;
mod  routers;
use  routers::router::get_router;
#[tokio::main]
async  fn  main() {
//计数器
let  count  =  Arc::new(Mutex::new(0u32));
//日志设置
log4rs::init_file("config/log4rs.yaml", Default::default()).unwrap();
info!("starting HTTP server at http://localhost:80");
//获取路由
let  route  =  get_router(count);
//启动服务器
warp::serve(route).run(([127, 0, 0, 1], 80)).await;
}

路由定义文件

warp web框架初体验

通过warp::get() 或者 warp::post() 或者 warp::delete()等方法可以注册不同请求的路由base,然后通过and方法去把路由规则加入进来。
warp框架很好的用链式调用的方法,将每一个路由配置通过or方法进行注册。

  • warp::path! 是一条宏命令
    用于注册路由规则,通过【/】将参数分割开,参数用对应的数据类型表示,比如String,u32,u8,u16…
  • and_then内部传入handle方法,并且是async 修饰的方法,表示异步函数。
  • 不同group的路由
    比如get组的路由和post组的路由,通过or方法链接合并,传去warp::serve函数内运行。

文章的demo的Github地址
github.com/529124368/rust_warp_web...

warp除了可以写简单的webapi,还支持websocket等。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1
chongyi

还是更建议 Axum

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!