A query language for your API
最近公司经常用到这东西,小编出于兴趣,学习一二,记录如下,如有不妥,还望多多指教。
一 概述
GraphQL是一种用于api的查询语言,在项目运行时对现有数据的一种查询方式。GraphQL为API中的数据提供了一个完整的、可理解的描述,允许客户端要求他们真正需要的东西,使API更容易随着时间的推移而发展,并支持强大的开发工具。
同级可对比APIJson,个人感觉apiJson在Java开发中比较实用和简单,如权限验证通过 @ MethodAccess 注解Model来添加角色对表的操作权限,以及支持远程函数调用,而相对比,graphql学习难度和成本以及规范性,都比较高。不过技多不压身,今天咱来看看。
(APIjson个人感觉可参考该博客,感觉还不错https://blog.csdn.net/u014618954/article/details/107021638/)
二 初步展示
graphql是api的查询语言,在一定程度上使开发更加高效和便捷,一下是一个例子。
例如,一个GraphQL服务告诉我们登录用户是谁(me)以及该用户的名字可能是这样的:
①创建
在这些类型上定义类型和字段,然后为每种类型的每个字段提供函数。
type Query {
me: User
}
type User {
id: ID
name: String
}
function Query_me(request) {
return request.auth.user;
}
function User_name(user) {
return user.getName();
}
②查询
{
me {
name
}
}
③返回
{
"me": {
"name": "Luke Skywalker"
}
}
上述为查询query,可根据name查询所有对应名字的name,以及通过type,多参等查询优点,具体也不多说,可参考graphql官方文档,简单讲解分为三点,如下。
应用场景:
①多平台等原因导致的字段冗余
②一个页面多次调用聚合数据
③经常改动接口且精简逻辑
三 实际应用
讲了半天湿的,下面来点干货,本次演示Java和go两种语言的基本使用
3.1 java+spring boot+graphql
我们的示例应用程序将是一个简单的API,用于获取特定书籍的详细信息。
① 构建目录
Select:
Gradle Project
Java
Spring Boot 2.1.x
Project metadata
Group: com.graphql-java.tutorial
Artifact: book-details
Dependency
web
② 添加基础依赖
com.graphql-java:graphql-java:11.0 /