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

相关推荐
晓数12 分钟前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
毅航14 分钟前
MyBatis 事务管理:一文掌握Mybatis事务管理核心逻辑
java·后端·mybatis
我的golang之路果然有问题29 分钟前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
柏油38 分钟前
MySql InnoDB 事务实现之 undo log 日志
数据库·后端·mysql
写bug写bug2 小时前
Java Streams 中的7个常见错误
java·后端
Luck小吕3 小时前
两天两夜!这个 GB28181 的坑让我差点卸载 VSCode
后端·网络协议
M1A13 小时前
全栈开发必备:Windows安装VS Code全流程
前端·后端·全栈
蜗牛快跑1233 小时前
github 源码阅读神器 deepwiki,自动生成源码架构图和知识库
前端·后端
嘻嘻嘻嘻嘻嘻ys3 小时前
《Vue 3.4响应式超级工厂:Script Setup工程化实战与性能跃迁》
前端·后端
橘猫云计算机设计3 小时前
net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·爬虫·python·mysql·django·毕业设计