Domain Graph Service (DGS) - Netflix 出品的基于 Spring Boot 的开源 GraphQL 框架
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
GraphQL 社区里有很多精彩的故事,讲述了 GraphQL 的实现如何改变产品,使其变得更好、更强大。有时,GraphQL 的应用会催生创新的需求。就像 GraphQL 本身一样,它最初由 Facebook 开发,后来公开发布。许多公司也决定开源他们的 GraphQL 实现,并将其提供给公众,因为他们看到了 GraphQL 能为开发者社区带来的巨大益处。以下就是其中一个故事。
它的起源
2019年,Netflix决定实施联邦式GraphQL架构,旨在:
- 为消费者提供统一的API,
- 赋予后端开发人员灵活性
- 保持服务隔离。
对于一家后端开发一直采用 Spring Boot 的公司来说,向新架构的过渡意味着要在 Netflix 的 Java 生态系统中为众多不同的后端团队部署 GraphQL,这无疑是一项挑战。要称这项迁移成功,显然必须确保所有被迫实施 GraphQL 的团队都能在 Spring Boot 中获得卓越的 GraphQL 开发体验。这正是 Domain Graph Service 诞生的原因。
域图服务
Domain Graph Service (DGS)是 Netflix 内部开发的一个框架,旨在简化 Spring Boot 中独立和联合 GraphQL 服务的实现。该框架基于graphql-java构建。尽管 DGS 的大部分代码是用 Kotlin 编写的,但它主要设计用于 Java,其主要特性包括:
- 基于注解的Spring Boot编程模型
- 与 Spring Security 集成,
- Gradle 代码生成插件,用于从 GraphQL schema 创建 Java/Kotlin 类型。
- 一个用于 Java 的 GraphQL 客户端
- 错误处理,
- 轻松与GraphQL Federation集成
- GraphQL 订阅(WebSocket 和 SSE),
- 自动支持接口/联合类型。
意识到这对他们的开发者来说意义重大,Netflix 决定在 2020 年开源该框架并围绕它建立一个社区(Netflix 使用的是相同的开源组件!)。
来源:netflixtechblog.com
入门
使用 DGS 非常简单。该框架的基础架构基于 Spring Boot 开发者熟知的基于注解的编程模型。让我们来看一个由该项目团队提供的示例:
首先,你需要定义一个 GraphQL schema,例如,像这样的简单 schema 就可以了:
type Query {
shows(titleFilter: String): [Show]
}
type Show {
title: String
releaseYear: Int
}
定义好模式后,下一步就是实现一个获取器……就完成了。这样就足以让你的 GraphQL 端点运行起来了!
@DgsComponent
public class ShowsDatafetcher {
private final List<Show> shows =
List.of(
new Show("Stranger Things", 2016),
new Show("Ozark", 2017)
);
@DgsData(parentType = "Query", field = "shows")
public List<Show> shows(@InputArgument("titleFilter") String titleFilter) {
if(titleFilter == null) {
return shows;
}
return shows.stream()
.filter(s -> s.getTitle().contains(titleFilter))
.collect(Collectors.toList());
}
}
来源:netflixtechblog.com
试试看
如果您想尝试 DGS 框架,请务必查看其官方文档和指南,或者直接访问GitHub 上的 DGS 代码库。
加快您的 GraphQL API 开发速度
GraphQL Editor是一款强大的辅助工具,无论您是 GraphQL 高级用户还是 GraphQL API 初学者,都能轻松上手。我们的一体化 GraphQL 开发环境将帮助您更快地构建、管理和部署 GraphQL API。立即免费试用 GraphQL Editor!
文章来源:https://dev.to/graphqleditor/domain-graph-service-dgs-open-source-graphql-framework-for-spring-boot-by-netflix-37h3

