这是一篇面向那些想用Java创建GraphQL服务的人。它需要一些Spring Boot和Java知识,虽然我们简要介绍了GraphQL,但本教程的重点是用Java开发GraphQL服务器。
3分钟内搭建GraphQL
GraphQL是一种从服务器检索数据的查询语言。在某种程度上,它是REST、SOAP或gRPC的替代品。
假设我们要从在线商店后端查询特定书籍的详细信息。
使用GraphQL,您向服务器发送以下查询,以获取id为“book-1”的书籍的详细信息:
{ bookById(id: "book-1"){ id name pageCount author { firstName lastName } } }
这不是JSON(尽管它看起来有意地相似),而是一个GraphQL查询。它基本上说:
- 查询具有特定id的书籍
- 给我那本书的id,名字,页数和作者
- 对于作者,我想知道名字和姓氏
响应为正常JSON:
{ "bookById": { "id":"book-1", "name":"Harry Potter and the Philosopher's Stone", "pageCount":223, "author": { "firstName":"Joanne", "lastName":"Rowling" } } }
GraphQL的一个非常重要的特性是它是静态类型的:服务器确切地知道您可以查询的每个对象的形状,任何客户端实际上都可以“内省”服务器并请求所谓的“模式”。模式描述了哪些查询是可能的,哪些字段可以返回。(注意:当我们在这里提到模式时,我们总是提到“GraphQL模式”,它与其他模式(如“JSON模式”或“数据库模式”)无关)
上述查询的架构如下所示:
type Query { bookById(id: ID): Book } type Book { id: ID name: String pageCount: Int author: Author } type Author { id: ID firstName: String lastName: String }
本教程将重点介绍如何在Java中使用此模式实现GraphQL服务器。
我们几乎没有触及GraphQL可能实现的功能的表面。更多信息可在官方网页上找到:https://graphql.github.io/learn/
GraphQL Java概述
GraphQL Java是GraphQL的Java(服务器)实现。GraphQL Java Github组织中有几个存储库。最重要的是 GraphQL Java引擎 ,它是其他一切的基础。
GraphQLJava引擎本身只关心执行查询。它不处理任何与HTTP或JSON相关的主题。对于这些方面,我们将使用 GraphQLJavaSpringBootAdapter
,它负责通过SpringBootoverHTTP公开我们的API。
创建GraphQL Java服务器的主要步骤包括:
1. 定义GraphQL模式。
2. 决定如何获取查询的实际数据。
我们的示例API:获取书籍详细信息
我们的示例应用程序将是一个简单的API,用于获取特定书籍的详细信息。这绝不是一个全面的API,但对于本教程来说已经足够了。
创建一个Spring启动应用程序
创建Spring启动应用程序最简单的方法是在https://start.spring.io/.
选择:
- Gradle Project
- Java
- Spring Boot 2.1.x
对于我们使用的项目元数据:
com.graphql-java.tutorial book-details
作为依赖项,我们只选择Web。
点击Generate项目将为您提供一个随时可用的Spring Boot应用程序。所有随后提到的文件和路径都将与此生成的项目相关。
我们在build的dependencies部分向我们的项目添加了三个依赖项 build.gradle