🦀30分钟掌握 RustRover + Rocket +diesel 异步 Rust Web 项目

一、开始之前

要开始一个 Rust Web 项目,我们需要一些趁手的工具(编辑器)和库类。这里我们推荐

二、Why Rust Rover ?

Rust Rover 是一个 Rust 的集成开发环境。安装即用,非常方便。一年前写过一篇关于 Rust Rover 的文章: 🦀RustRover, Rust 终于有了自己的专属 IDE,感兴趣的可以看看。相比 VSCode 集成开发环境更加简单直观。

2.1)免费用于非商业用途

2.2)支持 Cargo

2.3)数据库支持

2.4)AI 能力

2.5)插件:汉语支持

Rust Rover 通过插件支持中文,你可以安装此插件讲界面翻译成中文

你也可以根据自己的需要安装插件,例如:

  • IdeaVim vim 插件,在 RustRover 中体验原汁原味的 vim 味道
  • 其他自己喜欢的主题等等...

良好的代码提示功能

三、使用 RustRover 初始化一个项目

虽然你可以使用 cargo 提供 cli 直接创建,但是这里为了编程统一,我们直接使用 RustRover 来创一个项:

四、安装 Rocket + diesel 等异步依赖

需要注意的是 rocket v0.5 已经支持异步特性。我们可以使用异步,提高 Rokect 的异步 IO 能力。

五、数据库操作 diesel

我们使用 diesel + diesel-async + rocket_db_pools 处理数据库操作。因为之前已经全局安装 diesel-cli 这里我们直接数据配置,和迁移工作,接下来需要熟悉一下 dieselcli 功能:

这里默认已经有了 Rust 的开发环境(没有就安装一下),当然就开始之前还需要做一些前置工作:

我们使用 diesel ORM 操作数据库。diesel 有自己的命令行工具,这里简单的了解一下:

操作 命令
安装 Diesel CLI cargo install diesel_cli --no-default-features --features postgres
生成迁移目录 diesel setup
生成指定名称的迁移文件 diesel migration generate <m_name>
运用迁移 diesel migration run
回滚并重新运行迁移 diesel migration redo
回滚到上一次迁移 diesel migration revert
重置数据库 diesel database reset

5.1) 数据库配置

配置有两个配置:

  • 🌷迁移 cli 工具,从 .env 中获取 DATABASE_URL 地址。
  • 🌷Rocket 中的 Rocket.toml 中配置数据库的地址。

在开始之前我们需要 pg 数据库中创建一个数据库 test-demo

5.2)第一次迁移并编写 sql 语句

sh 复制代码
diesel setup

diesel migration generate "init" # 第一迁移名字

我们在迁移 sql 文件中添加,post 表和字段。然后执行迁移,将表添加到数据库中:

sh 复制代码
diesel migration run

我们在 pgAdmin 中查看表生成情况:

数据库创建好之后,我们可以编写 Rust 相关的代码了。

会生一个 schema.rs 文件,包含 sql 中的表:

5.3)使用 Rust Rover 数据库功能

查看 Rust Rover 数据功能的数据库表:

这个表在后面操作数据库有大用处。做好数据准备工作,我们就可以编写模型文件了。

六、模型

我们就数据表编写模型文件 models.rs

模型文件在数据校验,有大作用,也是数据库操作经典文件。

七、将数据库抽象出来

rs 复制代码
use rocket_db_pools::{Database};
use rocket_db_pools::diesel::{PgPool};

#[derive(Database)]
#[database("my_db")]
pub struct Db(PgPool);

我们使用 rocket_db_pools 将数据抽象出来,然后注入到 Rocket 中并初始化:

rs 复制代码
#[macro_use] extern crate rocket;

use rocket_db_pools::Database;
use crate::db::Db;

#[launch]
fn rocket() -> _ {
    rocket::build().attach(Db::init()).mount("/", routes![])
}

八、Rocket 路由

有了 数据库 Db, models 和 schema 就可以对接 Rocket 的路由了,这里使用

  • 🌷mount 方法
  • 🌷routes 宏
ts 复制代码
#[macro_use] extern crate rocket;

use rocket_db_pools::Database;
use crate::db::Db;

mod models;
mod api;
mod db;
mod schema;

#[launch]
fn rocket() -> _ {
    rocket::build().attach(Db::init()).mount("/", routes![
          api::create, 
          api::update, 
          api::delete, 
          api::all
    ])
}

api 单独的抽象出来,然后全部挂在到 / 路由下。

九、实现路由 CRUD

首先导入依赖

rs 复制代码
use crate::db::Db;
use rocket::serde::{ json::Json};
use crate::schema::posts;
use diesel::prelude::*;
use rocket::response::{Debug};
use rocket_db_pools::{Connection};
use diesel_async::RunQueryDsl;
use rocket::http::Status;
use crate::models::{NewPost, Post};

type Result<T, E = Debug<diesel::result::Error>> = std::result::Result<T, E>;

9.1)获取所有数据

9.2)创建一条记录

9.3更新记录

9.4删除记录

十、调试

Rust Rover 调试也非常方便,我们可以直接在需要断点的位置发起调试

十一、接口测试

11.1)RostRover HTTP 测试文件测试接口

在 Rost Rover 新建一个 HTTP 文件,然后发送请求。

11.2)Postman

借助 Postman 你可以做更加专业的测试:

十二、代码

十三、小结

本文基于 RustRover + Rocket + diesel 快速开始一个 Rust Rocket 的异步 Web 项目。RustRoverRust 开箱即用,全面支持 Cargo,轻松并开发创建 Rust 项目,类型提示完整。使用 Rust RoverDebuuger 功能可以让你更加专注到业务逻辑的开发。

相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy4 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack5 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9655 小时前
pip install 已经不再安全
后端
寻月隐君6 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github