构建基于 Rust 技术栈的 Graphql 服务(1)- 起步及 crate 选择

2022-06-30 16:35:20 浏览数 (1)

本系列博客中,我们使用 Tide async-grapqhl mongodb jsonwebtoken handlebars-rust 构建基于 Rust 技术栈的 GraphQl 服务。同时,我们需要做到前后端分离。

需要说明的是:本博客即采用前述 Rust 技术栈搭建,目前仍然处于开发阶段。

  1. 后端主要提供 GraphQL 服务,使用到的 crate 包括:tide、async-graphql、jsonwebtoken、mongodb/bson、serde、ring、base64,以及 pinyin 等。
  2. 前端主要 WEB 应用服务,使用到 crate 包括:tide、rhai、surf、graphql_client、handlebars-rust、cookie 等。

Rust 环境的配置,cargo 工具的使用,以及 Rust 程序设计语言和 GraphQL 的介绍和优势,在此不在赘述。您可以参阅如下资料学习 Rust 程序设计语言,以及 Rust 生态中的 GraphQL 实现。

如下为本文提供的一些参考资料,但微信公众号中不能张贴链接,因此请通过阅读原文查看详细信息。

代码语言:javascript复制
请参阅 Windows、Linux,以及 MacOS 下安装和配置 Rust 环境,以及配置 Rust 工具链的国内源、配置 Cargo 国内镜像源。
Tide,Rust 官方团队开发的 HTTP 服务器框架。
actix-web,Rust 社区中最活跃、成熟的 WEB 框架。推荐作为了解,本系列文章中我们选择 Tide。
通过例子学 Rust,推荐。
Rust Cookbook 中文版,推荐。
Cargo 中文文档,推荐
Rust 程序设计语言
async-graphql 中文文档
Juniper 中文文档,推荐作为了解,本系列文章中我们选择 async-graphql。

其它概念性、对比类的内容,请您自行搜索。

工程的创建

文章的开始提到,我们要做到前后端分离。因此,前、后端需要各自创建一个工程。同时,我们要使用 cargo 对工程进行管理和组织。

首先,创建本次工程根目录和 cargo 清单文件

代码语言:javascript复制
mkdir rust-graphql
cd ./rust-graphql

touch Cargo.toml

Cargo.toml 文件中,填入以下内容:

代码语言:javascript复制
[workspace]
members = [
  "./backend",
  "./frontend",
]

文件中,workspace 是 cargo 中的工作区。cargo 中,工作区共享公共依赖项解析(即具有共享 Cargo.lock),输出目录和各种设置,如配置文件等的一个或多个包的集合。

虚拟工作区是 Cargo.toml 清单中,根目录的工作空间,不需要定义包,只列出工作区成员即可。

上述配置中,包含 2 个成员 `backend` 和 `frontend`,即我们需要创建 2 个工程(请注意您处于 rust-graphql 目录中):前端和后端 —— 均为二进制程序,所以传递 --bin 参数,或省略参数。

代码语言:javascript复制
cargo new backend --bin
cargo new frontend --bin

创建后,工程结构如下图所示——

现在,工程已经创建完成了。

工具类 crate 安装

工程创建完成后,我们即可以进入开发环节了。开发中,一些工具类 crate 可以起到“善其事”的作用,我们需要先进行安装。

  • cargo-edit,包含 cargo add、cargo rm,以及 cargo upgrade,可以让我们方便地管理 crate。
  • cargo-watch,监视项目的源代码,以了解其更改,并在源代码发生更改时,运行 Cargo 命令。

好的,我们安装这 2 个 crate。

代码语言:javascript复制
cargo new backend --bin
cargo new frontend --bin

安装依赖较多,如果时间较长,请配置 Rust 工具链的国内源。

添加依赖 crate

接着,我们需要添加开发所需依赖项。依赖项的添加,我们不用一次性全部添加,我们根据开发需要,一步步添加。首先,从后端工程开始。

后端工程中,我们提供 GraphQL 服务,需要依赖的基本 crate 有 tide、async-std、async-graphql、mongodb,以及 bson。我们使用 cargo add 命令来安装,其将安装最新版本。

代码语言:javascript复制
cd backend
cargo add tide async-std async-graphql mongodb bson

安装依赖较多,如果时间较长,请配置 Cargo 国内镜像源。

执行上述命令后,rust-graphql/backend/Cargo.toml 内容如下所示——

代码语言:javascript复制
...
[dependencies]
async-graphql = "2.6.0"
async-std = "1.9.0"
bson = "1.2.0"
mongodb = "1.2.0"
tide = "0.16.0"
...

至此,我们构建基于 Rust 技术栈的 GraphQL 服务的后端基础工程已经搭建完成。暂时休息一会,我们开始构建一个最基本的 GraphQL 服务器。

谢谢您的阅读。

0 人点赞