- 作者:老汪软件技巧
- 发表时间:2024-10-14 00:02
- 浏览量:
一、开始之前
要开始一个 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 通过插件支持中文,你可以安装此插件讲界面翻译成中文
你也可以根据自己的需要安装插件,例如:
良好的代码提示功能
三、使用 RustRover 初始化一个项目
虽然你可以使用 cargo 提供 cli 直接创建,但是这里为了编程统一,我们直接使用 RustRover 来创一个项:
四、安装 Rocket + diesel 等异步依赖
需要注意的是 rocket v0.5 已经支持异步特性。我们可以使用异步,提高 Rokect 的异步 IO 能力。
五、数据库操作 diesel
我们使用 diesel + diesel-async + rocket_db_pools 处理数据库操作。因为之前已经全局安装 diesel-cli 这里我们直接数据配置,和迁移工作,接下来需要熟悉一下 diesel 的 cli 功能:
这里默认已经有了 Rust 的开发环境(没有就安装一下),当然就开始之前还需要做一些前置工作:
我们使用 diesel ORM 操作数据库。diesel 有自己的命令行工具,这里简单的了解一下:
操作命令
安装 Diesel CLI
cargo install diesel_cli --no-default-features --features postgres
生成迁移目录
diesel setup
生成指定名称的迁移文件
diesel migration generate
运用迁移
diesel migration run
回滚并重新运行迁移
diesel migration redo
回滚到上一次迁移
diesel migration revert
重置数据库
diesel database reset
5.1) 数据库配置
配置有两个配置:
在开始之前我们需要 pg 数据库中创建一个数据库 test-demo
5.2)第一次迁移并编写 sql 语句
diesel setup
diesel migration generate "init" # 第一迁移名字
我们在迁移 sql 文件中添加,post 表和字段。然后执行迁移,将表添加到数据库中:
diesel migration run
我们在 pgAdmin 中查看表生成情况:
数据库创建好之后,我们可以编写 Rust 相关的代码了。
会生一个 schema.rs 文件,包含 sql 中的表:
5.3)使用 Rust Rover 数据库功能
查看 Rust Rover 数据功能的数据库表:
这个表在后面操作数据库有大用处。做好数据准备工作,我们就可以编写模型文件了。
六、模型
我们就数据表编写模型文件 models.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 中并初始化:
#[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 的路由了,这里使用
#[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
首先导入依赖
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 ResultDebug> = std::result::Result;
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 项目。RustRover 对 Rust 开箱即用,全面支持 Cargo,轻松并开发创建 Rust 项目,类型提示完整。使用 Rust Rover 的 Debuuger 功能可以让你更加专注到业务逻辑的开发。