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

相关推荐
南囝coding16 分钟前
Claude 封禁中国?为啥我觉得是个好消息
前端·后端
六边形工程师24 分钟前
Docker安装神通数据库ShenTong
后端
六边形工程师26 分钟前
快速入门神通数据库
后端
重生成为编程大王31 分钟前
FreeMarker快速入门指南
java·后端
Dear.爬虫37 分钟前
Golang的协程调度器原理
开发语言·后端·golang
元闰子43 分钟前
怎么用CXL加速数据库?· SIGMOD'25
数据库·后端·面试
幂简集成1 小时前
GraphQL API 性能优化实战:在线编程作业平台指南
后端·性能优化·graphql
编码浪子1 小时前
趣味学RUST基础篇(构建命令行程序1)
开发语言·后端·rust
周小码1 小时前
极快文本嵌入推理:Rust构建高性能嵌入推理解决方案
开发语言·后端·rust
蜗牛快跑1231 小时前
拆巨资让 Claude Code 和 Codex 同时住进了我的终端里
前端·后端·ai编程