Administrator
Administrator
Published on 2025-01-13 / 27 Visits
1
0

短链接项目

短链项目思路

短链生成是将长链接转换为短链接方便分享与传播

1. 需求分析

  • 目标: 生成短链接,缩短原始URL,并提供访问重定向功能。

  • 功能需求:

    • 生成短链接。

    • 通过短链接重定向到原始URL。

    • 统计短链接的点击次数。

    • 可选功能:自定义短链接、设置短链接过期时间、统计访问来源(如IP、设备、时间等)。

  • 非功能需求:

    • 高性能:能够处理高并发请求。

    • 高可用性:系统稳定,不易宕机。

    • 安全性:防止恶意攻击,如SQL注入、DDoS等

2. 系统架构设计

  • 前端: 可以是一个简单的Web界面,用于用户输入长链接并生成短链接。

  • 后端: 处理业务逻辑,包括生成短链接、存储映射关系、统计点击次数等。

  • 数据库: 存储短链接与长链接的映射关系,以及相关统计信息。

  • 缓存: 用于提高性能,缓存频繁访问的短链接映射关系。

  • 监控与日志: 监控系统状态,记录日志以便排查问题。

3. 数据库设计

表:short_urls

主键索引:id 唯一索引:short_code

字段名

数据类型

描述

id

bigint

主键,自增

short_code

varchar(6)

短链接码,唯一

original_url

text

原始长链接

description

text

描述

created_time

datetime

创建时间

click_count

int

点击次数,默认0

expire_time

datetime

过期时间,可为空,为空则表示永久

表:click_log

主键索引:id 索引:short_url_id

字段名

数据类型

描述

id

bigint

主键,自增

short_url_id

bigint

短链表id

click_time

datetime

点击时间

ip_address

varchar(45)

用户IP地址

user_agent

text

用户代理信息

4. 短链接生成算法

  • 算法选择:

    • UUID: 生成唯一标识符,但长度较长,可能不符合“短”的要求。

    • Base62编码: 将数字转换为62进制字符串,使用0-9、a-z、A-Z字符,适合生成短链接。

    • 哈希算法: 如MD5、SHA1,但需要处理冲突。

    • 自增ID加编码: 使用自增ID进行编码,简单且冲突少。

    • 随机字符串: 生成随机字符串,检查是否已存在,若存在则重新生成。

  • 推荐方案: 使用自增ID结合Base62编码,结合时间戳或随机数,生成短链接码。

5. API设计

  • 生成短链接API:

    • 请求方式: POST /api/shorten

    • 请求参数: original_url (必填),expire_at (可选)

    • 响应: short_url (生成的短链接)

  • 重定向API:

    • 请求方式: GET /{short_code}

    • 处理: 将请求重定向到对应的original_url,并增加点击计数。

  • 统计API (可选):

    • 请求方式: GET /api/stats/{short_code}

    • 响应: 点击次数、访问来源等统计信息。

6. 安全性设计

  • 防止恶意生成链接: 限制生成频率,如IP限速。

  • 防止SQL注入: 使用参数化查询或ORM。

  • 数据传输安全: 使用HTTPS。

  • 防止点击劫持: 设置适当的HTTP头,如X-Frame-Options。

7. 扩展性设计

  • 支持自定义短链接: 允许用户输入自定义的短链接码。


Comment