Spring for GraphQL 1.0版发布

276 阅读2分钟

在成立不到两年的时间里,Spring for GraphQL1.0已经发布。
该项目整合了SpringGraphQL Java,是由两个团队合作开发的。

GraphQL是一种用于API的开源数据查询和操作语言,也是一种用于完成对现有数据查询的运行时。它是由Facebook开发的,并在2015年公开发布。

GraphQL允许客户定义所需数据的结构,并从服务器返回相同的数据结构,因此可以防止返回过大的数据量。

使用Spring Initalizr可以配置GraphQL的Spring,只需在最近发布的Spring Boot 2.7中添加graphql-spring-boot-starter这个依赖项。InfoQ将在后续发布关于Spring Boot 2.7.0的更详细的新闻报道。

Spring for GraphQL在客户端和服务器端都支持通过HTTP、WebSocket和RSocket处理GraphQL请求。

Spring for GraphQL简化了GraphQL项目的开发,因为:它能够从可配置的位置自动加载模式文件;提供基于注解的编程模型;注册一个 DataFetcherExceptionHandler来管理异常;并为GraphQL配置指标。

在下面所示的例子中,Spring将方法绑定到查询,并使用**RuntimeWiring.Builder类将上述处理方法注册为名为 "hello "的查询的DataFetcher**。

@Controller
public class GreetingController {

        @QueryMapping 
        public String hello() { 
            return "Hello, world!";
        }

}

也可以通过简单地使用**@SchemaMapping(typeName="Book", field="author")**来指定父类型名称和字段名称,如下图所示的例子。

@Controller
public class BookController {

    @SchemaMapping(typeName="Book", field="author")
    public Author getAuthor(Book book) {
        // ...
    }
}

通过使用DataLoader支持批量加载,以推迟单个实体实例的加载。

Spring for GraphQL还利用现有的Spring技术,通过GraphQL公开底层数据源。它支持使用QuerydslQuery by Example存储库来恢复数据到DataFetcher。

使用下面的代码,可以创建一个DataFetcher,它可以通过**RuntimeWiringConfigurer**注册。

// For single result queries
DataFetcher<Account> dataFetcher = QuerydslDataFetcher.builder(repository).single();

// For multi-result queries
DataFetcher<Iterable<Account>> dataFetcher = QuerydslDataFetcher.builder(repository).many();

DataFetcher从GraphQL请求参数建立一个Querydsl Predicate,并使用它来获取数据。

添加Spring安全注释,如**@PreAuthorize@Secured**,就有可能通过检查对GraphQL响应的特定部分进行数据检索的方法的授权来应用细粒度的安全。

在客户端,支持拦截和订阅请求。目前,只有WebSocket传输支持GraphQL流。

Spring for GraphQL仍处于起步阶段,很可能会随着新功能和错误的修复而发展,并可能成为流行的DGS框架替代品,在过去三年中在Netflix开发。