基于FastAPI实现短链重定向(1) -设计

前言

对于深受广大开发者喜爱的FastAPI框架,我在此之前已经投入学习并实践了一段时日。随着掌握深入,我利用此框架改造并提升了原先的代码覆盖率统计服务。然而,为了能进一步掌握并熟练运用该框架,我总是心怀一种想要着手完成更多练习项目的强烈欲望。近日,无意间获得了这样一份颇具挑战性的训练机会,那便是在公司业务推广中采用以短信形式向客户传递推广信息,同时为此需在短信中加入特定的推广链接。阿里云提供的短信服务规定了短信最大长度为500字符,因此对过长过细的网址进行简化转变无疑是非常必要的。以此项目为契机,我会倾尽全力,参照业内在实际开发中的典型思维模式,充分利用FastAPI框架来进行实践,力求通过此次锻炼,更熟练地掌握这一优秀的编程框架。

需求分析

关键需求: 短链重定向

附加需求: 记录点击链接的次数、依据不同渠道批量生成短链内容、构建短链用以验证用户身份及权限

技术实施

我们选用基于SQLite 3数据库以存储短链信息,同时利用SQLAlchemy进行异步的数据交换。

表格设计

此需求相对简单明了,为了满足现有需求,我们初步拟定设计以下表格:分别称之为用户信息表(user)和短链信息表(short_url)。这两大表便构成我们实现需求所需的全部基础要素。

user表用于存储用户登录详情,其中包括如下字段:

  • username:表示用户名;
  • password:为用户设置的密码;
  • created_at:存储用户添加账号的日期;

而short_url表则包括如下元素:

  • short_tag:代表短链的标签标记;
  • short_url:将完整的短链地址汇聚其中;
  • long_url:存储指向实际页面的长链地址;
  • visits_count:记录短链被访问的总次数;
  • created_at:记录短链生成的具体时刻;
  • created_by:描述短链出自哪位用户之手所构造;
  • msg_context:展示短链中所包含的群发信息细节。

项目结构设计

FastAPI官方为有意于学习或上手的战友们提供了许多具有指导意义的demo资源。若您对此饶有兴致,不妨前往查阅:github.com/tiangolo/fu...

参考上述公开资料以及其他知名开源项目的设计理念,经过慎重考虑后,我决定将项目整体架构设计成如下格局:

  • api:主要放置已然编译好的API,其中包括用户登陆以及短链访问跳转入驻等关键路由信息。
  • config:主要储存设定信息,囊括数据库连接配置诸如此类的必要资讯。
  • db:主要储存定义与数据库便捷建立关联关联的相关配置以及与之紧密相连的非腹腔化对象实例。
  • dependencies:专用来妥善保管相关的依赖注入依赖项。
  • models:概括性地抽象出数据库表格中映射的ORM模型类。
  • schemas:墙纸如何展现各个接口的入站参数集、结束输出集的各个字段类型的固定含义。
  • services:集中存放按照ORM模型类精炼好的CRUD基本操作。
  • utils:容纳了项目期间实际运用到的各类实用工法类。
  • app.py:用于精确定制FastAPI的对象属性以及与初始化相关的路由注册操作流程。
  • main.py:真正见证了应用程序启动的核心入口文件。

后续展望

遵照所需,我们已完成初步方案,包括精确设定数据库和分布项目等环节。现正全力以赴实现各功能特性。尽管不可避免地会遭遇全新领域的挑战,但请放心,届时我们将适时发布相关文章提供深入解读与说明。

敬请期待:下一期会详尽介绍数据库与模型定义的基础设置,诚挚邀请志同道合者继续关注此专栏,并为其点赞及收藏支持,谢谢啦。

相关推荐
稚辉君.MCA_P8_Java10 分钟前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
t***p93519 分钟前
idea创建SpringBoot自动创建Lombok无效果(解决)
spring boot·后端·intellij-idea
d***817226 分钟前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
无限大636 分钟前
RBAC模型:像电影院选座一样管理权限,告别"一个用户配一个权限"的噩梦
后端
间彧38 分钟前
在CI/CD流水线中如何集成自动化的发布验证和熔断机制?
后端
间彧1 小时前
如何处理蓝绿部署中的数据迁移和数据库版本兼容性问题?
后端
间彧1 小时前
什么是金丝雀/灰度发布
后端
不知更鸟1 小时前
前端报错:快速解决Django接口404问题
前端·python·django
4***72131 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
间彧1 小时前
什么是蓝绿部署
后端