要解决Apollo Android GraphQL客户端中相同响应的重复代码生成问题,可以使用以下方法:
plugins {
id "com.moowork.gradle.node" version "1.2.0"
}
dependencies {
implementation 'com.apollographql.apollo:apollo-runtime:2.5.6'
implementation 'com.apollographql.apollo:apollo-coroutines-support:2.5.6'
}
apollo {
generateKotlinModels.set(true)
customTypeMapping.put("DateTime", "java.util.Date")
}
apollo {
generateKotlinModels.set(true)
customTypeMapping.put("DateTime", "java.util.Date")
useSemanticNaming.set(true)
sourceSet {
main {
graphqlFiles.srcDirs += 'src/main/graphql'
}
}
/**
* 自定义模板
*/
customTypeMapping.put("DateTime", "java.util.Date")
generateOperationOutput.set(true)
generateFragmentImplementations.set(true)
packageName.set("com.example.graphql")
outputDir.set(file("${project.projectDir}/src/main/java"))
operationOutputFileName.set("Operations.kt")
fragmentOutputFileName.set("Fragments.kt")
irPackageName.set("com.example.graphql.ir")
customTypesMapping.set([
"DateTime": "java.util.Date",
...
])
useSemanticNaming.set(false)
}
task downloadApolloSchema {
doLast {
exec {
commandLine 'curl', 'http://localhost:8080/graphql/schema.json', '--output', 'src/main/graphql/schema.json'
}
}
}
generateApolloSources.dependsOn downloadApolloSchema
fragment UserInfoFragment on User {
id
name
email
}
然后在不同的请求中使用...
语法引用这个Fragment:
query GetUser($id: ID!) {
user(id: $id) {
...UserInfoFragment
}
}
query GetUsers {
users {
...UserInfoFragment
}
}
这样Apollo Android客户端只会生成一次相同的代码。
这些方法可以帮助减少重复代码生成,并提高代码的可维护性。