前言#
我们前几天刚学习完了Rocket,想了下学都学了,总得搞点东西练练手,Rocket官方的文档也比较粗糙(个人观点) ,一趟下来并不能快速的上手。
接下来准备搞一个简单的博客restful服务器。
另外我目前还是个前端切图仔,还在往全栈的方向学习,这下面涉及到的代码都比较粗糙,有些实现也比较蛋疼,请见谅。如果觉得那里可以改进,麻烦评论区说下,谢谢~
项目地址:
https://github.com/1714080902120/rust_rocket_crud_demo由于我是先实现完再写的这篇文章,如果有些地方无法运行,可以看下我项目里的代码。我也懒得再写一遍了。。。。
目标#
这篇文章仅入门,所以实现即可,没有优化相关的
- 文章的增删改查
- 用户的注册/登录、权限验证
接口设计#
按理说应该得搞一份需求分析,走一波流程。
但是我都忘了,就算了~。
这篇文章也只是简单的入门下,也不用那么正经。
下面是简单的分类,后面我们开始做的时候再来细嗦~
文章--article#
- 增/改:共用一个接口,根据
id是否有值区分 - 删:移除对应文章在数据库中的索引,保留文件。
- 根据
id查询单个/分页获取所有:两个共用一个接口,通过不同参数区分 - 模糊查询:通过关键字查询,仅支持匹配文章标题和内容简介
- 获取文章详情内容:根据
id获取,如果是用户本人请求的,则标记为可编辑。
用户--user#
- 注册:注册成功后直接进入登录状态
- 登录:登录后会获得一个
token,里面包含用户的id和一个时间戳,时间戳用于判断用户的token是否已经过期。
环境搭建#
说的简单,但是咱还没环境呢。。
数据库#
数据库这里采用postgreSQL[1] ,至于选择的原因,没啥。。单纯想学一下别的数据库,你也可以自行用别的数据库。
这里搭建直接基于docker[2],安装很舒服。
docker搭建:坏蛋Dan:docker安装postgresSQL和数据持久化
安装完之后我们来搭建项目
创建项目#
你可以选择workspaces,也可以不要,我这里直接创建workspaces,后面我们可能涉及到自己封装宏之类的,那么在同一个workspaces中就会轻松很多。
mkdir blog
cd blog
cargo new blog-server
echo > Cargo.tomlworkspace配置
[workspace]
members = [
"blog-server"
]blog-server的配置
[package]
name = "blog-server"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rocket = { version = "=0.5.0-rc.3", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
jsonwebtoken = "8"
md5 = "0.7.0"
regex = "1.8.1"
uuid = { version = "1.3.3", features = ["v4"] }
sqlx = { version = "0.6.3", features = ["uuid"]}
#指定连接的数据库
[dependencies.rocket_db_pools]
version = "=0.1.0-rc.3"
features = ["sqlx_postgres"]其中这里面的jsonwebtoken[3]、md5[4]、regex[5]以及uuid[6]都是业务相关的,现阶段不加上也可以。
serde[7]:这个不引入也可以,rocket里面也有暴露出来,主要是给我们的struct等实现Serialize/Deserialize。serde_json[8]:我们得通过这个create去实现把我们的内容序列化/反序列化,这样我们才能传输内容sqlx[9]:用于格式化sql语句并传输给数据库(异步的),rocket也内置了,不过有些特性没导出来,我们需要用到uuid去做类型定义,所以这里单独导入了。rocket_db_pools:rocket封装的数据库驱动器,异步的。 而sqlx_postgres则是专门用于对接postgresql数据库的驱动器。
然后进入到main.rs文件中
#[macro_use] extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello, world!"
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![index])
} 那么基础搭建完了,我们下一章准备接入数据库以及建表。
总结#
莫得
这段时间在参与公司的一个项目重构。。。累啊
参考#
- ^postgreSQL https://www.postgresql.org/
- ^docker https://www.docker.com/
- ^jsonwebtoken https://crates.io/crates/jsonwebtoken
- ^md5 https://crates.io/crates/md5
- ^regex https://crates.io/crates/regex
- ^uuid https://crates.io/crates/uuid
- ^serde https://crates.io/crates/serde
- ^serde_json https://crates.io/crates/serde_json
- ^sqlx https://crates.io/crates/sqlx
发布于 2023-06-07 18:00・IP 属地广东
