GraphQL使用心得

团队18年初开始调研并实践 GraphQL,但是我在忙于旧项目的开发,短期并没有参与到新项目中,因此实际开始接触 GraphQL,是在18年中旬。

18年初的新项目由于工期比较紧张,虽然说尝试了下 GraphQL,但是其实并没有多少积累,前端只是简单地拼接查询字符串后发请求,后端也只是简单的解析了一下查询字符串,并没有将整个 GraphQL 生态中相关的工具给利用起来。

18年中旬开始接手一个使用 Go + GraphGL 来实现的新项目后端任务,后续又在几个项目中逐步实践了一下 GraphQLGonode.js 中的使用,同时 GraphQL 在前端领域的相关工具,也尝试了不少。

一、主要技术

GraphQL

GraphQL 一种用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。

一个 GraphQL 服务是通过定义类型和类型上的字段来创建,然后给每个类型上的字段提供解析函数。

概念啥的,官网上都介绍的非常明确了,就不啰嗦了。

  • 客户端控制需要返回哪些数据。
  • 获取多个资源,只用一个请求。
  • 基于类型和字段的方式进行组织,而不是通过 url,可以通过一个 url 得到所有的数据。
  • 在接口描述的时候就具备了类型,明确接口的输入输出,只需要拿到 Schema 文件,就可以知道一个 GraphQL 服务能提供的所有能力了,省去了接口文档编写的繁琐。

Go + GraphQL

因为团队的后端目前正逐步在向 Go 转型,所以一开始决定在 Go 中使用 GraphQLGo 中的 GraphQL 库有两个:

  • Graphql-go/graphql: Code-First 模式的库,无需编写 GraphQL SDL,通过 Go 自带的结构体来描述 GraphQL 中的数据类型,由库本身来转换为 GraphQL Schema
  • graph-gophers/graphql-go: Schema-First 模式的库,需要先写好 SDL,然后在 Go 中写相应的字段的解析函数。

关于 Code-FirstSchema-First 的区别,可以看:[The Problems of “Schema-First” GraphQL Server Development][https://www.prisma.io/blog/the-problems-of-schema-first-graphql-development-x1mn4cb0tyl3/] 这篇文章。

但是这两个库其实都只是起了一个查询字符串解析,然后调用相应的解析函数的作用,并没有完整的整合中间件等一系列功能,实际使用的时候,还是得结合某个 web 框架来使用。

之前的项目中,都是结合 gin 来使用,权限校验等等都是先通过 gin 的中间件来完成,错误处理也是 graphql 库中处理一遍,然后 gin 的中间件中再处理一遍。

使用的时候总感觉就是变相的 restful,用起来很难受。

Node.js + GraphQL

GraphQLs 虽然说各个语言都有实现的库,但是论生态,还是在 node.js 中最好,相关的工具和库非常多。

Apollo GraphQL 提供了全套的解决方案,如果在 node.js 中使用 GraphQL 的话,建议直接使用 Apollo

Prisma

Prisma 是基于 GraphQL 的后端解决方案,在数据库之上,提供了一个 prisma server 用于计算层,提供 GraphQL 类型的接口用于数据查询,使得数据库在后端代码中基本是无感的,只用调用 prisma client 发起 graphql 形式的 http 请求即可。

同时 Prisma 提供了根据预先定义好的数据模型,自动生成增删改查所有接口的能力,基本上只要写好 datamodel,一个简单的 GraphQL 后端就出来了。

在小的数据展示类项目中,可以极大的节省后端的人力,前端一人即可完成整个项目的开发。

同时 Prisma 官方的 blog 中有大量非常优质的 GraphQL 相关的文章,值得一看: [Prisma Blog][https://www.prisma.io/blog/]

二、周边工具

GraphQL 的生态非常好,周边的小工具用好了之后,可以极大的提高开发效率。

GraphQL Config

graphql-config is the easiest way to configure your development environment with your GraphQL schema (supported by most tools, editors & IDEs)

用来配置使用的 GraphQL 服务的地址等等信息,用于自动获取 Schema 文件。

GraphQL CLI

用来管理 GraphQLconfig 文件和 schema 文件的 CLI 工具,如果使用 IDE 的话,装上插件之后都可以在 gui 中完成,就不需要命令行工具了。

JS GraphQL

一款 Webstorm 的插件,提供了语法高亮,提示等等一系列功能,支持 graphql-config,通过配置文件自动获取 schema 文件。

GraphQL Faker

用户 mock 数据的一款工具,基于 graphqlschema 文件,加上特定的字段修饰,快速的运行一个假数据服务器。

GraphQL Playground

类似于 GraphIQL,也是一款 GraphQL 请求客户端,一般 GraphQL 库中都集成了一个网页版的 Playground ,便于随时查看 schema 文档和模拟请求。

Insomnia

类似 Postman 的一款请求客户端,但是支持 GraphQL,同时也支持多端同步、环境变量等功能,用来测试请求很方便。

你可能感兴趣的:(graphql)