>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Kotlin

无痛编写 Kotlin AWS 代码:告别 Java 历史包袱

在 Kotlin 中使用 AWS 的开发者可能还记得 Java SDK v2。虽然在 Kotlin 项目中使用它是可行的,但你需要不断地将 CompletableFuture 包装在协程中,忍受冗长的 Java builder 语法,还要在构建中引入额外的依赖。AWS 团队通过官方项目 aws-sdk-kotlin 解决了这个问题——这是一个从零开始专为 Kotlin 编写的客户端。

原生 Kotlin SDK 带来的变化

该库的主要优势是原生协程支持和 Kotlin Flow。无需回调地狱或异步包装器。对 S3、DynamoDB 或 Lambda 的调用写法与 Kotlin 中任何其他异步代码完全一致。

第二个重要点是多平台架构基础。该库面向 Kotlin Multiplatform,可开箱即用于多个目标平台:

  • JVM,用于 Ktor 或 Spring 上的经典后端
  • Android,用于移动应用
  • GraalVM Native Image,用于编译二进制文件的快速启动

通过 Smithy 进行代码生成和定向构建

AWS 有数百种服务。如果将每种服务的客户端编译打包成一个库,最终产物会变得非常大。SDK 作者通过基于声明式 Smithy 语言的代码生成解决了这个问题。

仓库中不包含每种 AWS 服务的预生成代码。代码在项目构建期间生成。如果你从源码构建 SDK,可以只指定应用程序中实际需要的服务。

配置过滤在 local.properties 文件中进行:

如果需要从构建中移除某些服务,使用减号:

代码生成通过 Gradle 触发:

之后,使用标准任务构建生成的模块:

这种方法在本地开发和测试单个 SDK 模块时节省了时间。

通过 Dokka 构建文档

对于代码文档,开发者使用 Dokka——这是 JetBrains 的标准工具,支持 KDoc 格式。

要在本地生成 API 参考文档,仓库提供了命令:

生成的 HTML 文档进入 build/dokka/htmlMultiModule 目录。要在浏览器中打开它,需要任何简单的 HTTP 服务器,例如 IntelliJ IDEA 内置的服务器或通过 Python 启动的服务器:

是否值得迁移到 Kotlin SDK

该仓库在 GitHub 上约有 500 颗星。这个数字相对较小,因为该项目长期处于活跃开发状态,许多团队习惯使用 Java SDK v2。尽管如此,该库已经可用于生产环境,并得到 Amazon 的官方支持。

该库在以下四种场景中特别有用:

  • 你正在构建一个 Android 应用,需要直接访问 AWS 服务,而不想引入繁重的 Java 依赖。
  • 你正在为 AWS Lambda 编写 Kotlin 无服务器函数,并使用 GraalVM Native Image 编译,冷启动速度至关重要。
  • 你的后端完全基于协程和 Ktor 构建,你希望保持一致的异步代码风格。
  • 你正在制作一个多平台模块,将移动端和服务器的逻辑结合在一起。

如果你已经有一个基于 Spring Boot 的大型遗留项目,使用旧的 Java SDK,则无需急于重写。但对于 Kotlin 中的新服务和应用,这个 SDK 看起来是合理的选择。

相关项目