从10月8日至10日在纽约市加入我们,学习关于GraphQL联盟和API平台工程的最新技巧、趋势和新闻。加入我们参加2024年纽约市GraphQL峰会
文档
免费开始
您正在查看此软件先前版本的文档。 切换到最后一个稳定版本。

Gradle 插件配置


的默认配置适用于大多数用例。如果您是初学者,请参阅入门指南以了解默认Gradle配置的概述。

本文介绍了使用Gradle时的高级用例的配置选项。

使用多个GraphQL API

Apollo Kotlin支持与具有不同模式的不同GraphQL端点进行通信。要这样做,创建多个服务如下:

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

指定模式位置

使用schemaFile属性指定您的模式文件的位置:

apollo {
service("service") {
schemaFile.set(file("shared/graphql/schema.graphqls"))
}
}

默认情况下,Apollo Kotlin会将项目中所有匹配模式schema.[graphqls|json|sdl]的文件合并。

合并多个模式文件

Apollo Kotlin支持一系列客户端,包括@nonnull@optional@typePolicy。这些指令使得您能够通过客户端特定的类型和扩展您的服务器基础模式。

如果您在一个单独的文件中扩展您的模式,您可以指示Apollo Kotlin从多个文件组合中构建其模式,如下所示:

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

默认情况下,Apollo Kotlin会将项目中所有匹配模式schema.[graphqls|json|sdl]的文件合并。

连接生成的源

默认情况下,Apollo Kotlin会将生成的源代码添加到

  • Java VM项目的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

或者例如,像这样(特定后端根据口味)。

- 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 服务,手动声明服务可能更简单,例如:

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

下载数据模式

默认情况下,Gradle 插件会注册一个downloadApolloSchema任务,您可以从命令行使用该任务:

# --schema is interpreted relative to the project's root directory (can also be an absolute path). This example
# assumes the root project directory and an Android app in `app`
./gradlew downloadApolloSchema \
--endpoint="https://your.domain/graphql/endpoint" \
--schema="app/src/main/graphql/com/example/schema.graphqls"

如果您经常这样做或想从 CI 自动化过程,您可以配置一个introspection {}块:

apollo {
service("starwars") {
packageName.set("com.starwars")
// This will create a downloadStarwarsApolloSchemaFromIntrospection task
introspection {
endpointUrl.set("https://your.domain/graphql/endpoint")
// 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"))
}
}
}

这将创建一个名为download<ServiceName>ApolloSchemaFromIntrospection的任务。

[!NOTE]
这与其他的downloadApolloSchema任务不同。请确保调用download<ServiceName>ApolloSchemaFromIntrospection

如果您使用Apollo Studio注册模式,请使用registry块替代:

apollo {
service("starwars") {
packageName.set("com.starwars")
// This will create a downloadStarwarsApolloSchemaFromRegistry task
registry {
key.set(System.getenv("APOLLO_KEY"))
graph.set(System.getenv("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"))
}
}
}

这将创建一个名为download<ServiceName>ApolloSchemaFromRegistry的任务(默认为downloadServiceApolloSchemaFromRegistry)。

Previous
连接源集
Next
查询
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,作为Apollo GraphQL运营。

隐私政策

公司