kotlin-ktor.md 2.6 KB

Kotlin (Ktor) 项目:URL 缩短服务

概述

使用 Kotlin 和 Ktor 构建一个异步、高性能的 URL 缩短服务。利用 Kotlin 协程处理高并发请求,提供 API 将长 URL 转换为短 URL,并通过短 URL 重定向。

功能需求

1. 核心 API

  • 创建短 URL: POST /shorten
    • 请求: { "url": "..." }
    • 逻辑: 验证 URL -> 生成唯一哈希 -> 存入数据库。若 URL 已存在,则返回现有短 URL。
    • 响应: { "short_url": "http://domain.com/hash" }
  • URL 重定向: GET /{hash}
    • 逻辑: 查找哈希对应的原始 URL,找到则 301/302 重定向,未找到则 404。

2. 附加功能

  • 自定义短链接: POST /shorten 时可选 custom_alias 字段。
  • 点击统计: 每次重定向时,异步增加点击计数。
  • 获取统计: GET /stats/{hash} - 返回原始 URL、创建时间和点击次数。

技术栈

  • 语言: Kotlin
  • 框架: Ktor
  • 构建: Gradle (Kotlin DSL)
  • 数据库: PostgreSQL 或 MongoDB (使用异步驱动)
  • 数据访问: Exposed (SQL) 或 KMongo (MongoDB)
  • 序列化: kotlinx.serialization
  • 异步: Kotlin Coroutines

项目结构

/ktor-url-shortener
└── src/main/kotlin/com/example/
    ├── Application.kt      # Ktor 主入口和模块配置
    ├── plugins/            # 插件配置 (Serialization, Routing)
    ├── routing/            # 路由定义
    ├── services/           # 业务逻辑
    ├── dao/                # 数据访问对象
    └── models/             # 数据模型

任务步骤

  1. 初始化: 使用 Ktor 官方生成器创建项目,选择 Gradle, Netty, Routing, Serialization 和数据库插件。
  2. 数据库设置: 配置数据库连接,并使用 Exposed 或迁移工具设置表结构。
  3. 数据模型: 创建用于 API 和数据库映射的数据类。
  4. DAO层: 实现数据访问逻辑,提供 suspend 函数(如 findByHash, saveMapping)。
  5. Service层: 实现生成唯一哈希的核心逻辑(如 Base62 编码自增ID)。
  6. 路由配置: 定义 /shorten/{hash} 的 API 路由,调用 Service 完成操作。
  7. 插件组装: 在主应用中配置 ContentNegotiationRouting 插件。
  8. 错误处理: 使用 StatusPages 插件捕获异常并返回合适的 HTTP 状态。
  9. 测试: 使用 Ktor 的 testApplication 工具编写 API 集成测试。

先行任务: 研究并确定短哈希生成算法,并设计出数据库表的具体结构。