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

Apollo Kotlin 简介

Apollo Kotlin 是 JVM、Android 和 Kotlin 多平台使用的强类型、缓存 GraphQL 客户端。


📣 迁移指南:如果您正在使用 Apollo Kotlin 3,请查看 迁移指南。您也可以 查看 3.x 文档迁移指南。您也可以 查看 3.x 文档

Apollo Kotlin 是一个强类型的 GraphQL 客户端,它为您的 GraphQL 操作生成 Kotlin 模型。

Apollo Kotlin 执行操作针对的 GraphQL 服务器 并以操作特定的 Kotlin 类型返回结果。这意味着您不需要处理解析 JSON,也不需要手动将客户端的值强制转换为正确的类型。Map 和将值强制转换为正确类型的客户端。您也不需要自己编写模型类型,因为这些类型是从您的应用程序使用的 GraphQL 定义生成的。

因为生成的类型是 特定的,您只能访问作为操作一部分实际指定的数据。如果您在一个操作中不请求特定的 ,则无法访问返回数据结构上相应的属性。

此库主要针对 Android 设计,但您可以在任何 Kotlin 应用程序中使用它,包括 KMP(Kotlin 多平台)。

功能

  • Kotlin 多平台代码生成
  • 查询、
  • 无反射解析
  • 规范化缓存
  • HTTP 缓存
  • 自定义 类型
  • 自动
  • 批处理
  • 文件上传
  • 用于测试的模拟模型
  • AppSync 和 -ws WebSocket
  • GraphQL AST 解析器
  • Android Studio 和 IntelliJ 插件

入门

如果您对 GraphQL 感兴趣,请查看 教程,该教程将指导您使用 Apollo 构建 Android 应用。

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

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

plugins {
id("com.apollographql.apollo") version "4.0.0"
}

添加运行时依赖

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

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

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

💡 提示

使用Java吗?Apollo Kotlin拥有一个 Java支持仓库。

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

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

默认情况下,Apollo Kotlin需要在模块的src/main/graphql(或者KMP的src/commonMain/graphql)目录中有一个模式。您可以使用来下载模式,使用命令./gradlew downloadApolloSchema。有时内省被禁用,您需要要求后端团队提供模式。将此模式复制到您的模块:

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

在一个${module}/src/main/graphql/HeroQuery.graphql文件中编写

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

构建您的项目。这将生成一个HeroQuery类,您可以使用ApolloClient实例使用它:

// 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的其他信息

多平台

Apollo Kotlin 是一个 Kotlin Multiplatform 项目。

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

jvmApple¹jswasmJslinuxX64
apollo-api (模型)
apollo-runtime (网络、查询批处理、apq、…)🚫
apollo-normalized-cache🚫
apollo-normalized-cache-sqlite🚫🚫🚫
apollo-http-cache🚫🚫🚫🚫

¹: Apple currently includes

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

需求

某些平台有特定的运行时要求

  • JVM 8+
  • Android API level 21+ (apollo-http-cache 需要启用 核心库反编译 在 Android API levels < 26)
  • iOS 13+

在构建时,它需要

  • Gradle 8.0+
  • JVM 项目需要 Kotlin 1.9+
  • 原生、JS 和 Wasm 项目需要 Kotlin 2.0+

Proguard / R8 配置

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

Android Studio / IntelliJ 插件

Android Studio 和 IntelliJ 的一个 插件 可用于帮助您使用 Apollo Kotlin,提供自动代码生成、与 GraphQL IntelliJ Plugin 集成、导航到 GraphQL 定义、迁移助手等。

有关安装说明和更多信息,请参阅 此处

版本发布

最新版本是 4.0.0

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

发布版本托管在 Maven Central 上。该插件还托管在 Gradle Plugin Portal

plugins {
id("com.apollographql.apollo") version "4.0.0"
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.apollographql.apollo:apollo-runtime:4.0.0")
// Optional: if you want to use the normalized cache
implementation("com.apollographql.apollo:apollo-normalized-cache-sqlite:4.0.0")
// 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.apollo:apollo-api:4.0.0")
}

快照

最新的开发更改可在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...
}
}

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

这些快照在下一次对 main 的推送时更新。

Android Studio / IntelliJ插件的每周快照 也可用

演变策略

您可以在 专门的页面 上了解我们的演变策略。

贡献

如果您想贡献,请参阅 CONTRIBUTING.md

社区集成

其他资源

  • Confetti:一个使用 Apollo Kotlin、SwiftUI 和 Jetpack Compose 的 Kotlin 多平台会议应用程序。
  • MortyComposeKMM:一个使用 Apollo Kotlin、SwiftUI 和 Jetpack Compose 的 Kotlin 多平台 GitHub 演示模板。
  • Kotlin 多平台之旅:该项目如何迁移到 Kotlin 多平台,在 2020 年 6 月 Kotliners 活动上发表的演讲。
  • #125,Fragmented Podcast:关于 Apollo Kotlin 以及整个旅程的为什么和如何。
  • GraphQL.org:有关 GraphQL 本身的介绍和参考。
  • apollographql.com了解 Apollo 开源和商业工具。
  • Apollo 博客阅读关于 GraphQL、Apollo 产品发布和社区文章的长篇内容。
  • Apollo Twitter 账户获取最新资讯。
下一页
迁移到 v4
评价文章评价在 GitHub 编辑编辑论坛Discord

©2024Apollo Graph Inc.,以 Apollo GraphQL 经营。

隐私政策

公司