本系列博客中,我们使用 Tide async-grapqhl mongodb jsonwebtoken handlebars-rust 构建基于 Rust 技术栈的 GraphQl 服务。同时,我们需要做到前后端分离。
需要说明的是:本博客即采用前述 Rust 技术栈搭建,目前仍然处于开发阶段。
- 后端主要提供 GraphQL 服务,使用到的 crate 包括:tide、async-graphql、jsonwebtoken、mongodb/bson、serde、ring、base64,以及 pinyin 等。
- 前端主要 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
文件中,填入以下内容:
[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 服务器。
谢谢您的阅读。