GraphQL是什么
GraphQL是什么,它是哪来的,点击here可以知道,如果英文不好,可以看这里。简单一点说,它是Facebook觉得REST不够好,所以搞了这个,方便Client向Server要数据用的。官方的定义是"GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data."。如何理解这个定义呢?
a query language for APIs ===> 一套查询语言,用于 API调用。Server端提供Client端API,通过这些API,Client和Server间通过GraphQL来进行数据查询交流
a runtime for fulfilling those queries with your existing data ===> 一套用现有数据填充那些查询的运行环境。在这个运行环境中,Server能够处理Client端发来的用GraphQL表达的请求,并且返回所查询数据。
具体来说如下几个步骤:
- Server开发人员学习了GraphQL Spec后,按照它的语法写出了Schema,这个Schema告诉Client开发人员它能提供什么数据。
- Server开发人员也按照GraphQL Spec写了个解释程序,这个程序可以解析从Client端发过来的符合GraphQL规范的Request,
- Client开发人员也同样学习了GraphQL Spec,同时他看了Server提供的Schema,
- 根据这个Schema,用GraphQL规定的格式,Client开发人员写了一个Request发给Server端,
- Client端从Server端那里拿到了想要的数据。
如果你想更好的理解GraphQL,建议看一下官网的FAQ,从而更好的理解它是什么,它不是什么。
资源
资源 | 说明 |
---|---|
https://graphql.org | GraphQL官网 |
https://spec.graphql.org | GraphQL规范 |
SWAPI GraphQL API | 可以练习编写GraphQL的request。在编辑框内,按住"Shift+空格"会跳出代码提示 |
https://graphql.cn | GraphQL的中文官网 |
GraphQL · GitHub | https://graphql.org对应的Github |
https://www.graphql-java.com | GraphQL解析器的Java语言实现官网,上述图中2的一种实现 |
GraphQL Java · GitHub | graphql-java官网 |
graphql-playground | 专门用于发送GraphQL Request的客户端。可以理解为GraphQL专用Postman |
Hello World
在这个章节,通过完成一个“Hello World”项目来建立起后续更复杂GraphQL项目的起点。
每完成一步大的修改,就会提交到study-graphql-guide上,所以通过查看提交记录,就能了解如何从最初一步步开始建立整个项目。
Spring已经提供了Spring for Graphql来给我们使用,所以我们的Hello GraphQL项目基于Spring。同时graphql-java的tutorials中book-details项目也有很多代码可以借鉴。
- 建立初始项目
打开https://start.spring.io/,按照如下图所示配置,然后点击 "GENERATE" 。
代码提交记录:从spring initializr创建spring for graphql项目
- 定义、注册schema及绑定DataFetcher
从 book-details 拷贝 schema.graphqls、GraphQLProvider.java 和 GraphQLDataFetchers.java,修改pom.xml。
代码提交记录:定义、注册schema及绑定DataFetcher
注意,这里pom.xml中,graphql-java-spring-boot-starter-webmvc要用2.0 - 实现"Hello World"
在schema.graphqls中增加"say_something" Query,并且绑定DataFetcher。
代码提交记录:实现"Hello World" - 编译运行
cd <项目所在目录>
mvn clean compile package
java -jar ./target/study-graphql-guide-0.0.1-SNAPSHOT.jar
验证
这里使用上述"资源"中提到的graphql-playground来进行验证。
安装完毕,打开应用,在如下界面,选择