Netflix在实现其区域图服务(DGS)框架的几个月内,就向Java社区开放了源代码DGS。这个框架使得在Spring引导软件中实现GraphQL变得更简单,并且适合于每个独立的和联合的GraphQL。DGS帮助GraphQL联邦创建一个统一的API网关,在后台调用特定问题所需的各种合作问题。
DGS框架依赖于springboot基于注释的模型。除了与Spring Boot安全性的集成之外,还提供了一个单元来查看框架。通过度量和跟踪选项进行监控。
DGS在Netflix内部使用,并对各种选项进行了全面检查。在引擎盖下面,DGS使用graphqljava库。Netflix建议采用schema-first增长战略来概述合同。向后兼容性是必不可少的,特别是对于GraphQL设置,可以通过评估完全不同的模式变体来验证。
作为REST的替代,GraphQL解决了过度获取或不足获取知识的困难。过度获取是指从一个端点获取所有的信息,但是只利用一部分知识,比如说,一个cell软件。这需要过滤并保留未使用的剩余知识。在fetching下面是从一个端点获取所有信息,但是没有足够的知识。这通常需要第二个端点的名称。例如,一个人可能希望检索所有男女同校学生的电子邮件地址,而另一个人可能希望检索注册学者的各种课程。
除了模式优先增长之外,DGS框架还有助于代码优先增长。使用此策略,在整个运行时主要基于代码中的定义生成模式。
实现DGS首先定义一个定义API的模式。Gradle的DGS代码技术插件可以用来生成主要基于问题对象的API
kind Question {
films(titleFilter: String): [Movie]
}
kind Film {
title: String
...
}
通过使用信息获取程序应用API。用@DgsData
注释的策略实现了一个非强制性的学科知识获取器。
@DgsComponent
public class MoviesDatafetcher {
non-public remaining Listing<Film> films=
Listing.of(
new Film("The Hitchhiker's Information to the Galaxy", 2005)
);
@DgsData(parentType = "Question", discipline = "films")
public Listing<Film> films(@InputArgument("titleFilter") String titleFilter) {
if(titleFilter == null) {
return films;
}
return films.stream()
.filter(s -> s.getTitle().incorporates(titleFilter))
.acquire(Collectors.toList());
}
}
在启动Spring Boot软件之后,/graphql
端点就在那里了。GraphiQL问题编辑器是通过/GraphiQL端点提供的。可以找到不同的选项来提高实例的安全性、度量和跟踪。
Netflix已经为Spring Boot开放了DGS框架(域图服务)GraphQL服务器框架。从公司内部的一个工具开始,它已经被慷慨地开源给我们其他人享受。
Netflix是那些超越REST的组织之一,转而采用GraphQL。Netflix没有向UI开发人员公开大量的微服务,而是选择了一个由GraphQL支持的统一API聚合层。因为他们的基础设施也使用springboot,所以合并是必然发生的。
因此,DGS框架构建在graphql java之上,本质上它在库的底层细节上提供了一层抽象。虽然只使用Kotlin编写(需要kotlin1.4),但该框架主要针对Java,因为Java与Spring的关系最为密切。那个你也可以用Kotlin编写代码。
集成库很容易,因为它也利用了springboot基于注释的模型。例如,在实现数据获取程序(返回查询数据的结构)时,可以使用以下基于注释的代码段:
@DgsComponent
public class ShowsDatafetcher {
private final List<Show> shows = List.of(
new Show("Stranger Things", 2016),
new Show("Ozark", 2017),
new Show("The Crown", 2016),
new Show("Dead to Me", 2019),
new Show("Orange is the New Black", 2013)
);
@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());
}
}
除此之外,它还附带了许多其他功能:
- 基于注释的Spring-Boot编程模型
- 将查询测试编写为单元测试的测试框架
- Gradle代码生成插件,用于从模式创建类型
- 与GraphQL Federation轻松集成
- 与Spring Security集成
- GraphQL订阅(WebSockets和SSE)
- 文件上载
- 错误处理
- 许多扩展点
安装起来很容易。只需添加对库的引用com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter
和让它使用GraphQL模式文件,因为DGS是为模式优先开发而设计的。
要为模式中描述的每个类型生成每个GraphQL类型,以及生成数据获取程序,项目中必须包含DSG codegen插件:
plugins {
id("com.netflix.dgs.codegen") version "4.0.12"
}
这是根据映射规则工作的,例如,基本标量类型映射到相应的Java/Kotlin类型(String、Integer等),而日期和时间类型映射到相应的Java/Kotlin类型java.time
类。
代码生成器还可以创建客户机API类,您可以使用这些类使用Java从GraphQL端点查询数据。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1837.html
暂无评论