Groovy:GQL(GraphQL 库)
graphql-github-io-zh-Hans生态项目与库
Groovy:GQL(GraphQL 库)
项目简介
GQL 是一个专为 Groovy 语言打造的 GraphQL 实现库。它充分利用 Groovy 的动态特性和简洁语法,让开发者能够在 Groovy 项目中以更自然、更高效的方式构建和消费 GraphQL API。
主要特性
- Groovy 原生适配:深度结合 Groovy 语言特性,支持闭包、动态方法分派等,让 Schema 定义和 Resolver 编写更加简洁。
- 零外部依赖:核心库不依赖任何第三方 GraphQL 实现,开箱即用。
- 两种开发模式:同时支持 SDL 优先(Schema Definition Language)与 代码优先(Code-first)两种 Schema 构建策略。
- 类型安全:依托 Groovy 的静态编译能力(
@CompileStatic),在编译期即可发现类型错误。 - 响应式支持:与 RxJava 等响应式流无缝集成,适用于异步数据源场景。
安装
在 build.gradle 中添加依赖:
groovy
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.grooviter:gql:最新版本号'
}
对于 Maven 项目,则在 pom.xml 中声明:
xml
<dependency>
<groupId>io.github.grooviter</groupId>
<artifactId>gql</artifactId>
<version>最新版本号</version>
</dependency>
最新版本号请参考 Maven Central 或项目的 Releases 页面。
快速上手
以下通过一个简单的示例演示如何定义 Schema 并执行查询。
1. 定义 Schema
方式一:SDL 字符串定义
groovy
import gql.GQL
def schema = GQL.schema {
'''
type Query {
hello: String
}
'''
}
方式二:Groovy DSL 定义
groovy
import gql.GQL
def schema = GQL.schema {
query {
field('hello', String) { "Hello, World!" }
}
}
2. 执行查询
groovy
def result = GQL.execute(schema, '{ hello }')
assert result.data.hello == 'Hello, World!'
3. 带参数与解析器
groovy
import gql.GQL
def schema = GQL.schema {
query {
field('greet', String) { args -> "Hello, ${args.name}!" }
.argument('name', String, nullable: false)
}
}
def result = GQL.execute(schema, '''
query {
greet(name: "Groovy")
}
''')
assert result.data.greet == 'Hello, Groovy!'
进阶使用
使用 SDL 文件
将 Schema 定义为独立文件 schema.graphqls:
graphql
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
email: String
}
在 Groovy 中加载:
groovy
import gql.GQL
def schema = GQL.schema(new File('src/main/resources/schema.graphqls'))
与 Grails / Spring Boot 集成
GQL 提供了 Grails 与 Spring Boot 的官方插件,可实现自动配置与依赖注入:
groovy
// Grails 插件
compile 'io.github.grooviter:gql-grails:最新版本号'
// Spring Boot Starter
implementation 'io.github.grooviter:gql-spring-boot-starter:最新版本号'
集成后,只需声明一个 Bean 返回 Schema 实例,框架会自动暴露 /graphql 端点。
响应式数据源
groovy
import gql.GQL
import rx.Observable
def schema = GQL.schema {
query {
field('news', Observable) {
Observable.just(['Groovy 3.0 发布', 'GQL 2.0 新特性'])
}
}
}
def result = GQL.execute(schema, '{ news }')
项目资源
- 官方网站:https://grooviter.github.io/gql/
- GitHub 仓库:https://github.com/grooviter/gql
- API 文档:https://grooviter.github.io/gql/api/
- 问题与反馈:Issues
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
