本系列博客中,我们使用 Tide + async-grapqhl + mongodb + jsonwebtoken + handlebars-rust 构建基于 Rust 技术栈的 GraphQl 服务。同时,我们需要做到前后端分离。
需要说明的是:本博客即采用前述 Rust 技术栈搭建,目前仍然处于开发阶段。
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 可以起到“善其事”的作用,我们需要先进行安装。
好的,我们安装这 2 个 crate。
cargo new backend --bin
cargo new frontend --bin
安装依赖较多,如果时间较长,请配置 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 服务器。
谢谢您的阅读。