• 作者:老汪软件技巧
  • 发表时间: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 功能可以让你更加专注到业务逻辑的开发。


上一条查看详情 +有追求的开发者
下一条 查看详情 +没有了