🦀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 功能可以让你更加专注到业务逻辑的开发。

相关推荐
qq_17448285751 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
锅包肉的九珍1 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦1 小时前
Scala的Array(2)
开发语言·后端·scala
2401_882727572 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
心仪悦悦2 小时前
Scala中的集合复习(1)
开发语言·后端·scala
代码小鑫3 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖3 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
激流丶3 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka
uzong4 小时前
一个 IDEA 老鸟的 DEBUG 私货之多线程调试
java·后端
飞升不如收破烂~4 小时前
Spring boot常用注解和作用
java·spring boot·后端