加入我们,2024 年 10 月 8 日至 10 日在纽约市学习有关 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。加入我们,参加 2024 年纽约市 GraphQL 大会
文档
免费开始
您正在查看该软件旧版本的文档。 切换到最新稳定版本。

Apollo Kotlin 简介

Java 和 Kotlin 多平台强类型、缓存 GraphQL 客户端


📣 Apollo Kotlin 3 已全面上市。如果您正在使用 Apollo Android 2.x,请参阅迁移指南。您还可以查看 2.x 文档

Apollo Kotlin(原名 Apollo Android)是一个 ,可以从GraphQL查询中生成Kotlin和Java模型。

执行查询和 操作,针对运行,并以特定于查询的Kotlin类型返回结果。这意味着你无需处理解析JSON或传递Map(映射)和将值手动转换为正确的类型的操作。你也不必自己编写模型类型,因为这些类型是从UI使用的定义生成的。

由于生成的类型是特定于查询的,因此您只能访问查询中实际指定的数据。如果您在查询中没有请求特定的,您无法访问返回数据结构上的对应属性。

这个库主要针对Android设计,但您可以在任何Java/Kotlin应用程序中使用它,包括多平台。

特性

  • Java和Kotlin多平台代码生成
  • 查询、
  • 无反射解析
  • 规范化缓存
  • 自定义类型
  • HTTP缓存
  • 自动
  • 批处理
  • 文件上传
  • Espresso IdlingResource
  • 测试的模拟模型
  • AppSync和
  • GraphQL AST解析器

多平台

Apollo Kotlin是一个Kotlin Multiplatform项目。

以下是每个平台支持的功能矩阵

jvmApple¹jslinuxX64
apollo-api(模型)
apollo-runtime(网络、查询批处理、APQ等)🚫
apollo-normalized-cache🚫
apollo-adapters🚫
apollo-normalized-cache-sqlite🚫🚫
apollo-http-cache🚫🚫🚫

¹: 苹果目前包含

  • macosX64
  • macosArm64
  • iosArm64
  • iosX64
  • iosSimulatorArm64
  • watchosArm32
  • watchosArm64
  • watchosSimulatorArm64
  • tvosArm64
  • tvosX64
  • tvosSimulatorArm64

开始使用

如果您是 GraphQL 的新手,请查看教程,该教程将指导您使用 Apollo、Kotlin 和协同程序构建 Android 应用。

如果您想将 Apollo Kotlin 添加到现有项目中,请按照以下步骤操作:

将插件添加到您的build.gradle.kts

plugins {
id("com.apollographql.apollo3").version("3.8.3")
}

添加运行时依赖项

dependencies {
implementation("com.apollographql.apollo3:apollo-runtime:3.8.5")
}

设置用于生成的模型所使用的包名

apollo {
service("service") {
packageName.set("com.example")
}
}

Apollo Kotlin 支持三种类型的文件:

  • .graphqls 模式文件:使用 GraphQL 语法描述您后端中的类型。
  • .json 模式文件:使用 Json 语法描述您后端中的类型。
  • .graphql 可执行文件:使用 GraphQL 语法描述您的查询和操作。

默认情况下,Apollo Kotlin 要求在模块的src/main/graphql 目录中有一个模式。您可以使用 任务./gradlew downloadApolloSchema下载模式。有时候 introspection 是禁用的,您将需要请求您的后端团队提供模式。将该模式复制到您的模块:

cp ${schema} ${module}/src/main/graphql/

在文件${module}/src/main/graphql/GetRepository.graphql中编写一个查询:

query HeroQuery($id: String!) {
hero(id: $id) {
id
name
appearsIn
}
}

构建您的项目。这将生成一个用于与 ApolloClient 实例一起使用的 HeroQuery 类:

// Create a client
val apolloClient = ApolloClient.Builder()
.serverUrl("https://example.com/graphql")
.build()
// Execute your query. This will suspend until the response is received.
val response = apolloClient.query(HeroQuery(id = "1")).execute()
println("Hero.name=${response.data?.hero?.name}")

要了解更多关于其他 Apollo Kotlin API 的信息

要求

有些平台有特定要求

  • Android API 级别 21+(apollo-http-cacheapollo-adapters 需要 启用核心库降级 Android API 级别 < 26)
  • JDK 8+
  • iOS 13+

构建时需要

  • Gradle 5.6
  • JVM 项目需要 Kotlin 1.8+
  • 本地项目需要 Kotlin 1.9+

Proguard / R8 配置

由于 Apollo Kotlin 生成的代码没有使用任何反射,它可以安全地由 Proguard 或 R8 进行优化/混淆,因此不需要配置特定排除。

IntelliJ 插件

The JS Graphql IntelliJ Plugin 提供了自动完成、错误高亮以及跳转到定义功能,用于您的 .graphql 文件。您可以创建一个 .graphqlconfig 文件,以便使用 GraphQL 擦拭文件处理方案外代码(如编写临时查询以测试 )。请确保在插件设置中选中 “” 类似于 @nonnulltypePolicy 被识别。

发布

最新版本是

Maven Central

查看 变更日志 以了解发布历史。

发布托管在 Maven Central。此外,插件还托管在 Gradle 插件门户

plugins {
id("com.apollographql.apollo3").version("3.8.3")
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.apollographql.apollo3:apollo-runtime:3.8.5")
// optional: if you want to use the normalized cache
implementation("com.apollographql.apollo3:apollo-normalized-cache-sqlite:3.8.5")
// optional: if you just want the generated models and parsers and write your own HTTP code/cache code, you can remove apollo-runtime
// and use apollo-api instead
implementation("com.apollographql.apollo3:apollo-api:3.8.5")
}

快照

最新的开发更改可在 Sonatype 的快照仓库中获得

// build.gradle.kts
repositories {
maven {
url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
mavenCentral()
// other repositories...
}
// settings.gradle.kts
pluginManagement {
repositories {
maven {
url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
gradlePluginPortal()
mavenCentral()
// other repositories...
}
}

然后使用插件的 3.8.6-SNAPSHOT 版本和库。

贡献

如果您想贡献,请查看 Contributing.md

社区集成

补充资源

下一页
迁移到v3版本
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,以Apollo GraphQL名义进行商业行为。

隐私政策

公司