[GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(1)- 起步及 crate 选择
💥 内容涉及著作权,均归属作者本人。若非作者注明,默认欢迎转载:请注明出处,及相关链接。
Summary: 本系列博客中,我们使用 Tide + async-graphql + mongodb + jsonwebtoken + handlebars-rust 构建基于 Rust 技术栈的 GraphQL 服务,我们需要做到前后端分离。需要说明的是:本博客即采用前述 Rust 技术栈搭建,目前仍然处于开发阶段。 本文为起步教程,主要包括: 1、工程初始化; 2、crate 的比较和选择。
Topics: rust graphql async-graphql tide mongodb json-web-token jwt
本系列博客中,我们使用 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 实现。
- 请参阅 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 清单文件
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
参数,或省略参数。
cargo new backend --bin
cargo new frontend --bin
创建后,工程结构如下图所示——
现在,工程已经创建完成了。
工具类 crate 安装
工程创建完成后,我们即可以进入开发环节了。开发中,一些工具类 crate 可以起到“善其事”的作用,我们需要先进行安装。
- cargo-edit,包含
cargo add
、cargo rm
,以及cargo upgrade
,可以让我们方便地管理 crate。 - cargo-watch,监视项目的源代码,以了解其更改,并在源代码发生更改时,运行 Cargo 命令。
好的,我们安装这 2 个 crate。
cargo install cargo-edit
cargo install cargo-watch
安装依赖较多,如果时间较长,请配置 Rust 工具链的国内源。
添加依赖 crate
接着,我们需要添加开发所需依赖项。依赖项的添加,我们不用一次性全部添加,我们根据开发需要,一步步添加。首先,从后端工程开始。
后端工程中,我们提供 GraphQL 服务,需要依赖的基本 crate 有 tide、async-std、async-graphql、mongodb,以及 bson。我们使用 cargo add
命令来安装,其将安装最新版本。
cd backend
cargo add tide async-std async-graphql mongodb bson
安装依赖较多,如果时间较长,请配置 Cargo 国内镜像源。
执行上述命令后,rust-graphql/backend/Cargo.toml
内容如下所示——
...
[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 服务器。
谢谢您的阅读。