我是GraphQL的新手。目前,我正在尝试使用Netflix的DGS框架生成一个GraphQL客户端。我使用SWAPI的模式作为我的Domain Graph Service的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
}有没有正确的方法来做这件事,或者这是框架中的一个问题?
发布于 2021-10-07 09:33:46
这才是正确的行为。正如您可以在文档中读到的那样,该生成器生成示例API!
DGS代码生成插件在项目的构建过程中根据域图服务的GraphQL模式文件生成代码。该插件生成以下内容:类型的数据类型、输入类型、枚举和接口。包含类型和字段名称的DgsConstants类示例数据抓取器表示查询的类型安全查询API
生成器并不知道你想如何从你的数据库中获取数据。
如果想要生成示例,必须添加
generateJava {
...
includeQueries = ["hello"]
includeMutations = [""]
}发布于 2021-11-27 16:32:56
只是碰巧遇到了同样的问题!
我认为在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可以解决此问题。不过,这是swapi模式的一个bug。
https://stackoverflow.com/questions/69461192
复制相似问题