• Rust Rocket: 构建Restful服务项目实战


    前言

    这几天我的笔记系统开发工作进入了搬砖期,前端基于Yew,后端基于Rocket。关于Rocket搭建Restful服务,官方也有介绍,感觉很多细节不到位。因此我打算花2到3天的时间来整理一下,也算是对自己的一个交代。

    对于有一定经验的开发者来说,他们可能已经熟悉了 Restful 开发中的基本 HTTP 方法,如 GET、POST、PUT 和 DELETE。然而,从项目实战的角度来说,这些方法的细节处理是不容忽视的。在项目开发中,我们必须关注文件夹结构的组织、参数的获取、返回值的处理和日志处理等方面的问题。这些问题的解决对于一个项目的质量至关重要,任何偷工减料或者不恰当的行为都会对项目造成不良影响。

    在本篇文章中,我将会从实战的角度出发,帮助大家全面了解如何处理这些细节问题。

    介绍

    Rocket 是一个强大的 Rust 网络框架,可帮助开发者快速、安全地构建灵活易用的 web 应用程序,并提供类型安全性。在本实战文章中,我将使用 Rocket 框架搭建 Restful 服务,实现对笔记数据的 GET、POST、PUT 和 DELETE 操作,并使用 Postgres 数据库进行数据持久化。

    准备工作

    安装Rust

    Rust安装非常简单,命令行如下:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
    • 1

    需要注意的是,安装 Rust 的命令中有一个与人机交互的环节,需要选择安装模式。通常情况下,直接按回车键选择默认选项即可。
    但是,如果您希望在Dockerfile中来安装rust,比如,创建一个基于 CentOS 的 Rust 环境的 Docker 镜像,就必须跳过人机交互的环节,让命令行自动执行默认选项。
    如何通过命令行来自动执行默认选项呢,可能会对不熟悉 Linux 命令的人来说有些困难。不过,不用担心,这个坑我已经踩过去了,在 Dockerfile 中,您可以使用下面的命令来实现。

    run curl -s --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
    
    • 1

    (您可以在Docker hub上搜到官方制作的Rust的镜像,但是这个镜像是基于Ubuntu的。我曾经就遇到一个Rust项目运行于Centos7,依赖glibc 2.17。但是Rust的 Ubuntu镜像中的glibc的版本是2.35,为此做了一个Centos7的Docker镜像来编译Rust项目)

    创建项目

    创建项目很简单,就下面一行命令。但是从实战的角度,要多说两句。

    cargo new my-app
    
    • 1

    我们是先创建git仓库,再初始化项目代码呢,还是先初始化项目代码,再来设置git仓库?这里可能会小纠结一下。
    两种情况都可以,在我们分析这两种情况之前,我们来仔细看一下这个命令行到底为我们创建了什么?

    my-app是文件夹名称,也是项目的名称,它会自动初始化到my-app/Cargo.toml中,代码如下:

    [package]
    name = "my-app"
    version = "0.1.0"
    edition = "2021"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建的文件结构如下:

    bash-3.2$ cargo new my-app
    bash-3.2$ tree ./my-app
    ./my-app
    ├── Cargo.toml
    └── src
        └── main.rs
    
    1 directory, 2 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    情况1. 先创建git,再创建项目

    因此,如果我们先创建git,再初始化项目代码,那么我么创建项目的真正命令行如下:

    git clone git@gitee.com:xxx/my-app
    cd my-app
    cargo new my-app
    git add .
    git commit . -m "init commit"
    git push
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    得到的项目文件夹结构如下:

    bash-3.2$ tree ./my-app
    ./my-app
    └── my-app
        ├── Cargo.toml
        └── src
            └── main.rs
    
    2 directories, 2 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    从上面的目录结构来看,我们的开发目录是./my-app/my-app,比项目的目录多了一层。这样的好处是,可以把项目中和开发无关的文件放在项目的根目录./my-app中,比如,部署脚本,需求文档,项目相关的会议记录等;把和Rust开发相关的文件放在./my-app/my-app中。

    情况2. 先创建项目,再创建git

    如果我们先创建git,再初始化项目代码,那么我们创建项目的真正命令行如下:

    cargo new my-app
    cd my-app
    git init
    git add .
    git commit . -m "init commit"
    git remote add origin git@gitee.com:xxx/my-app.git
    git push -u origin "master"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    得到的项目文件夹结构如下:

    bash-3.2$ tree ./my-app
    ./my-app
    ├── Cargo.toml
    └── src
        └── main.rs
    
    1 directory, 2 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    从上面的目录结构看,我们的项目目录和开发目录是同一个目录。这样做的好处在于整个项目的目录结构比较直观,方便理解。

    上面从实战的角度介绍了项目的初始化方式,大家可以根据自己项目的特点和诉求进行调整。

  • 相关阅读:
    RabbitMQ集群
    基于Linux的Spark安装与环境配置
    java--自增自减运算符
    WinForm RichTextBox 加载大量文本卡死和UTF-8乱码问题
    Python中跨越多个文件使用全局变量
    k8s 怎么精准获取deployment关联的pods?
    SHOW PROCESSLIST 最多能显示多长的 SQL?
    丁鹿学堂:typescript轻松入门
    Doris代码结构
    【Mysql】Mysql内置函数介绍
  • 原文地址:https://blog.csdn.net/firefox1/article/details/133386837