加入收藏 | 设为首页 |

ultra-GraphQL从入门到喜爱

海外新闻 时间: 浏览:156 次

马涛,2013年参加去哪儿网技能团队,现在在国内酒店事业部,担任H5、小程序类运用开发。个人对移动端技能领域和前后端工程化有浓厚兴趣,勇于探索实践寻求极致。

GraphQL 是一种为 API 供给的查询言语,而且供给了完结这些数据查询的运行机制。开端由 facebook 于 2013 年创立,用于描绘 Client-Server 服务模型的才能和需求。后来脱离编码言语层面提出了一个敞开的标准,从 2015 年开端得到不断完善优化,2018 年 11 月 20 日完结 Working Draft 。

官方供给了 12 种言语版别的 GraphQL 完结库,GraphQL.js 是在 Java 方向的完结,本文以此包为根底带咱们领会 GraphQL 编码的风貌。

1

根底常识

不论是将 GraphQL 运用在 B/S 方法仍是 C/S 方法,都会涉及到体系数据的处理,咱们先看一下 GraphQL 服务的数据处理流程:

接下来咱们写个简略的比方来体会履行进程,然后了解一些根本概念:

从比方中咱们能够看到有一个进口办法 graphql ,这个便是 GraphQL 供给的用于构建类型体系和服务的中心模块。

从比方和上述接口咱们能够看出来,整个流程便是将服务端界说的 schemarootValue以及客户端恳求的 query交给 GraphQL 履行并获得成果。

根本流程搞清楚后咱们别离了解几个根本概念:

服务端界说的 schema 决议了对外供给的服务才能。它是一连串类型界说的调集,限制了客户端恳求字段的挑选规模以及回来值的数据结构。这是个很棒的特性,根本完结了代码即 wiki ,不必看 wiki 也能对数据结构一望而知。

GraphQL中用于界说 Schema 的是一种特别的语法格局:GraphQL schema language。

以上是一个简略的 schema 文件,完结了两个类型界说:

在实践项目中数据结构往往比这要杂乱,可是不论多杂乱的结构都要由一层层的目标类型来完结。

咱们要做的大多数作业便是经过关键字 type 来界说咱们自己的目标类型,目标类型的字段界说时需求指明类型(如 ID ),以及是否答应非空( ! )。

或许你现已留意到了 schema 中的 Query 类型,没错它比较特别!GraphQL 供给两个保存字 QueryMutation用于界说 查询/更改 的进口。

Query 中能够依据需求界说多个查询,这些查询能够单个恳求,也能够几个合在一起打包恳求。这种安排查询的方法正是 GraphQL 的特性地点,它使得 API 的安排对开发人员十ultra-GraphQL从入门到喜爱分友爱、灵敏!

Mutation 类型界说和 Query 相似,仅仅语义不同。

不论是保存目标仍是自界说目标类型,界说它们的字段时都需求指定ultra-GraphQL从入门到喜爱字段类型,比方上文看到的 String,Int 等,GraphQL 内置了一些根本类型:

内置类型关于咱们限制回来值的数据类型十分有协助,一起防止许多由于类型导致的问题。

从上文中咱们了解到 schema 界说了查询的进口以及回来值,而这一进程的完结则是由 rootValue 目标担任。它包括的办法称为 resolver ,与 scheme 中界说的查询一一对应,每逢接收到客户端的同名查询就会履行相应的办法。

rootValue 中的 resolver 能够是异步办法,可是只要办法名和 type Query 中界说的查询称号匹配的时分,客户端查询才会回来成果。这也是 graphql(...) 办法回来异步成果的原因!

服务端的 schema 和 rootValue 都准备好后,咱二建考试时间们的查询服务便是万事俱备,只欠东风啦!客户端经过向服务端发送格局化的 query 字符串,查询自己需求的目标和字段。比方:

服务端接收到以上查询就会调用相应的 resolver 并回来该查询要求的 id 和 name 字段,查询字符串中行首的 query 称为操作类型,fruits 称为操作称号。

如前例的查询,正常应回来以下相似的成果:

当有数据回来的时分,数据会放到 data 节点下,并依照客户端发送的查询称号安排内容。下面咱们改下查询字符串,发送一个不知道的查询名试试看。

发送到服务端履行后回来成果如下:

能够看到呈现过错后回来的目标里包括了 errors 节点,而且里面的过错信息很友爱!

事实上无论是 GraphQL 内部的校验失利仍是 resolver 中抛出的反常都会被捕获并放到 errors 节点数组中回来,假如异步 resolver 调用了 Promise.reject ,也会被当作过错处理

从以上成果咱们能够看出 graphql 的回来是固定的数据结构:

2

开发东西

工欲善其事,必先利其器!GraphQL 社区供给了一些东西库用于提高开发功率、下降体系杂乱度。下边咱们介绍两个常用的。

当查询内容比较杂乱的时分,类型、字段太多简单混杂,咱们能够运用 GraphiQL 这个东西来简化 query 的拼写进程,它首要用来经过阅读器构建、调试查询条件和检查回来成果。

它还供给了依据 schema 生成 Docs 的功用,能够便利的阅读与查询目标类型。

scheultra-GraphQL从入门到喜爱ma 在界说的时分,考虑事务的杂乱性对不同的事务进行模块化拆分是必要的,可是 GraphQL 自身不支持 schema 的模块化加载,咱们能够选用第三方模块包 graphql-import 完结事务的拆分。

首要界说 schema 的进口文件 index.graphql ,然后经过如下导入两个模块。

然后代码中调用 graphql-import 供给的办法就能够完结文件内容组合。

模块的 schema 兼并的时分,graphql-import 会主动剖析兼并的内容,将不同模块界说的 type Query 类型兼并成一个使其契合 GraphQL Schema 标准。

分模块界说类型的时分要留意命名问题,相同的自界说目标类型会掩盖从前的界说,能够选用加模块前缀的方法防止重ultra-GraphQL从入门到喜爱复界说。

3

总结

经过咱们上面内容的介绍,相信你现已把握了根本的入ultra-GraphQL从入门到喜爱门常识,而且也了解了相关的开发东西,接下来就能够进入着手实践阶段。

实践运用的进程中还会遇到许多 GraphQL 的高档特性,比方查询条件的参数界说、客户端查询的变量运用等等,深化体会后你一定会越来越喜爱它!

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。