GraphQL DGS 框架

netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现。
图片
GraphQL 主要是作用于数据接口,比如前端后端交互。无需定义或修改后台 Controller、Service 等业务代码即可实现灵活的数据变更,客户端可以自由获取服务端事先定义好的数据,提高了交互接口的灵活性
组件依赖

graphql-dgs-spring-boot-starter

com.netflix.graphql.dgs
graphql-dgs-spring-boot-starter
3.5.1

DGS 必须从 jcenter 下载,不然部分依赖无法下载。踩坑很久



true




false

central
bintray
https://jcenter.bintray.com





false

central
bintray-plugins
https://jcenter.bintray.com


bintray


定义接口 schema

/src/main/resources/schema/schema.graphqls
此文件定义了客户端请求入参格式和查询数据类型
type Query {
shows(title: String ,releaseYear: Int): [Show]
}

type Show {
title: String
releaseYear: Int
}
定义数据抽取规则

@DgsComponent
public class ShowsDatafetcher {

@DgsData(parentType = “Query”, field = “shows”)
public List shows(@InputArgument(“title”) String title, @InputArgument(“releaseYear”) Integer releaseYear) {
if (title == null) {
return shows;
}

return shows.stream().filter(s -> s.getTitle().contains(title)).collect(Collectors.toList());
}

// 模拟 DB 查询

private final List shows = List.of(
new Show(“java”, 1995),
new Show(“php”, 1995),
new Show(“python”, 1990),
new Show(“golang”, 2009),
new Show(“rust”, 2015)
);
}

UI 前端调试

访问: http://localhost:8080/graphiql
图片
条件查询
图片
接口调用

curl --location --request POST ‘http://localhost:8080/graphql’
–header ‘Content-Type: application/json’
–data-raw ‘{“query”:"{\n shows(title: “java”, releaseYear: 1995) {\n title\n releaseYear\n }\n}\n",“variables”:null}’
java 调用

@SpringBootTest(classes = {DgsAutoConfiguration.class, ShowsDatafetcher.class})
class ShowsDatafetcherTests {

@Autowired
DgsQueryExecutor dgsQueryExecutor;

@Test
void shows() {
List titles = dgsQueryExecutor.executeAndExtractJsonPath(
" { shows { title releaseYear }}",
“data.shows[*].title”);
assertThat(titles).contains(“java”);
}
}

本节源码

源码: https://github.com/lltx/dgs-demo
DGS 官网: https://netflix.github.io/dgs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值