这是一篇面向那些想用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
对于我们使用的项目元数据:
- Group:
com.graphql-java.tutorial
- Artifact:
book-details