加入我们,于10月8日至10日在纽约市学习有关GraphQL联盟和API平台工程的最新技巧、趋势和新闻。加入我们,参加在纽约市的GraphQL峰会2024
文档
免费开始

Gradle插件食谱


使用多个GraphQL API

支持与不同模式的多端点通信。为此,创建多个服务,如下所示:

apollo {
service("starwars") {
srcDir("src/main/graphql/starwars")
packageName.set("com.starwars")
}
service("githunt") {
srcDir("src/main/graphql/githunt")
packageName.set("com.githunt")
}
}

指定模式位置

使用schemaFiles 属性指定

apollo {
service("service") {
schemaFiles.from(file("shared/graphql/schema.graphqls"))
}
}

注意

如果schemaFiles未设置,Apollo Kotlin会将src/main/graphql/(Android/JVM项目)或src/commonMain/graphql/(多平台项目)中的所有*.[graphqls|json|sdl]文件组合在一起。

合并多个模式文件

Apollo Kotlin支持一组客户端,包括@nonnull@optional@typePolicy。这些指令允许您通过客户端特定的类型和扩展服务器的基本模式。

如果您在一个单独的文件(通常命名为extra.graphqls)中扩展了模式,您可以告诉Apollo Kotlin从多个文件组合中构建其模式,如下所示:

apollo {
service("service") {
schemaFiles.from("shared/graphql/schema.graphqls", "shared/graphql/extra.graphqls")
}
}

连接生成的源

默认情况下,Apollo Kotlin会将生成的源

  • 添加到JVM项目的main源集
  • 到多平台项目的commonMain源集
  • 到所有非测试,适用于Android项目

您可以通过outputDirConnection属性自定义此行为。例如,要将服务连接到Kotlin JVM项目的测试源集:

apollo {
service("service") {
outputDirConnection {
connectToKotlinSourceSet("test")
}
}
}

Android变体支持

有时,根据Android项目变体拥有不同的或模式

要实现这一点,您可以指示Gradle插件自动为每个变体配置一个服务:

apollo {
createAllAndroidVariantServices(sourceFolder = ".", nameSuffix = "") {
// Configure the service here
packageName.set("...")
}
}
  • sourceFolder是在“src/$sourceSetName/graphql”相对于GraphQL的位置。传递“.”以查找“src/$sourceSetName/graphql”中。
  • nameSuffix是用于服务名的后缀。留空则使用变体名不变。

类似于Android变体系统对源代码的处理,GraphQL文件是以附加方式处理的,并且src/main/graphql中的文件包含在所有服务中。

例如,如果某些操作只能存在于调试构建中,则项目结构可能如下所示:

- main
- graphql
- schema.graphqls // Schema for all variants
- operations.graphql // Operations shared by all variants
- debug
- graphql
- operations.graphql // Operations specific to the 'debug' build type

或者如果每个flavor都有一个特定的后端,则可能如下所示

- main
- demo
- graphql
- schema.graphqls // Schema for the 'demo' flavor
- operations.graphql // Operations specific to the 'demo' flavor
- full
- graphql
- schema.graphqls // Schema for the 'full' flavor
- operations.graphql // Operations specific to the 'full' flavor

apollo {
service("debug") {
srcDir(file("src/debug/graphql/"))
packageName.set("com.example")
outputDirConnection {
connectToAndroidSourceSet("debug")
}
}
service("release") {
srcDir(file("src/release/graphql/"))
packageName.set("com.example")
outputDirConnection {
connectToAndroidSourceSet("release")
}
}
}

下载模式

apollo {
service("starwars") {
packageName.set("com.starwars")
// This creates a downloadStarwarsApolloSchemaFromIntrospection task
introspection {
endpointUrl.set("https://your.domain/graphql/endpoint")
// The path is interpreted relative to the current project
schemaFile.set(file("src/main/graphql/com/example/schema.graphqls"))
}
}
}

apollo {
service("starwars") {
packageName.set("com.starwars")
// This creates a downloadStarwarsApolloSchemaFromRegistry task
registry {
key.set(System.getenv("APOLLO_KEY"))
graph.set(System.geten("APOLLO_GRAPH"))
// The path is interpreted relative to the current project here, no need to prepend 'app'
schemaFile.set(file("src/main/graphql/com/example/schema.graphqls"))
}
}
}

生成方法

  • “equalsHashCode”生成用于比较生成类属性的

以下是一些可能的配置

apollo {
service("service") {
// Generates equals and hashCode
generateMethods.set(listOf("equalsHashCode"))
// Generates toString, equals, and hashcode (the default for Java)
generateMethods.set(listOf("equalsHashCode", "toString"))
// Only generates copy
generateMethods.set(listOf("copy"))
// Generates data classes (the default for Kotlin)
generateMethods.set(listOf("dataClass"))
}
}
上一页
Gradle 插件配置
下一页
多模块
评分文章评分在GitHub上编辑编辑论坛Discord

版权所有2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司