知海

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 }')

项目资源

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。