0

我是 GraphQL 的新手。目前我正在尝试使用 Netflix 的 DGS 框架生成一个 GraphQL 客户端。我使用SWAPI的模式作为我的域图服务的 GraphQL 模式文件。但是该工具只生成与类型相关的类和接口。但不要按预期生成查询 API。这是我的 build.gradle 文件

plugins {
    id 'org.springframework.boot' version '2.5.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id("com.netflix.dgs.codegen") version "5.1.2"
}

group = 'com.clients.netflix'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web:2.5.5'
    developmentOnly 'org.springframework.boot:spring-boot-devtools:2.5.5'
    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.5.5'
    implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter:4.8.3'
}

test {
    useJUnitPlatform()
}

generateJava {
    generateClient = true
    generateDataTypes = true
}

有没有正确的方法可以做到这一点,还是框架中的问题?

4

2 回答 2

0

这是正确的行为。正如您在文档中所读到的,生成器会生成示例 API

DGS 代码生成插件会在项目构建过程中根据域图服务的 GraphQL 模式文件生成代码。该插件生成以下内容:类型、输入类型、枚举和接口的数据类型。包含类型和字段名称的 DgsConstants 类 示例数据提取 器 代表您的查询的类型安全查询 API

文档

生成器不知道您想如何从数据库中获取数据或什么。

如果要生成必须添加的示例

generateJava {
  ...
  includeQueries = ["hello"]
  includeMutations = [""]
}
于 2021-10-07T09:33:46.497 回答
0

刚刚偶然发现同样的问题!

我认为在 GQL 规范中定义查询/突变/订阅类型的方式存在细微差异,随后在 DGS 库中处理:

private fun generateJavaClientApi(definitions: Collection<Definition<*>>): CodeGenResult {
    return if (config.generateClientApi) {
        definitions.asSequence()
            .filterIsInstance<ObjectTypeDefinition>()
            .filter { it.name == "Query" || it.name == "Mutation" || it.name == "Subscription" }
            .map { ClientApiGenerator(config, document).generate(it) }
            .fold(CodeGenResult()) { t: CodeGenResult, u: CodeGenResult -> t.merge(u) }
    } else CodeGenResult()
}

以及它们是如何在 swapi gql 架构中指定的:

schema {
  query: Root
}

哎呀!将对象类型定义重命名为 Query 可以解决问题。Imo 虽然这是 swapi 模式的一个错误......

于 2021-11-27T16:32:56.077 回答