如果你关注我的 Github 号的话(好吧我赌你没关注,但欢迎互关),你应该会注意到我新近几天一直在给某个项目开 PR,疯狂 release,就是这玩意儿(话说你愿意给star 吗?)。
先大概介绍一下这个项目吧:给我们海中人做一个互联平台(航海家计划,将于今年 6 月正式发布,预计开发周期一年,明年同期公测并上线),而 Tinder 就是这个互联平台的后端。采用 FastAPI + pgsql + redis 为框架。
想象
虽然说高三的学业其实非常繁忙,但我依然抽出很多时间去构想,如下部分(数据库架构设计图、API 目录设计图):
可以看到如果你单纯去绘制下蓝图,整个系统还是非常简单的,但如果你真的着手去实践,你就会发现,哇,我其实很菜(对,反正我很菜)。
前进
我始终贯彻的一个开发理念是:先有后端才有前端,后端围绕数据,前端则着重用户体验。
所以首先要做的就是后端和数据部分!
数据库迁移
在开发 Tinder 之前,我其实拥有相当稀少的 FastAPI 开发基础,所以构建出一个基本框架(导入 App,设置 CORS,启动应用)不成问题,但这之后呢?我的评价是我就像从零开始学,在此欢迎各位大佬指出值得改进的地方与问题。
因为 Tinder 使用 Python 开发,所以我并不能直接使用 prisma 来实现数据迁移与操作,但并不是什么大问题对吧。Tinder 的数据迁移思路源自于 Mix-Space 中的迁移方法(遍历已存在的记录并在 MongoDB 中检查是否有相应的记录,如果发现没有则执行对应的文件,然后写入数据库的记录中防止后期重复执行),Tinder 使用了相同的思路,只不过将其迁移到了 Python+pgsql
你可以使用 excalidraw 来大致的了解整个流程,应当很好理解:
自定义 Log 打印
算是个没多少用的功能,没什么意义,只是为了取代原有的print( ),美化下日志输出,方便查找错误日志云云。
代码写在下面
# ANSI 颜色代码
_GREEN = "\033[92m"
_ORANGE = "\033[38;5;208m"
_RED = "\033[91m"
_RESET = "\033[0m"
_LEVEL_CONFIG = {
"SUCCESS": (_GREEN, "[SUCCESS]"),
"WARNING": (_ORANGE, "[WARNING]"),
"ERROR": (_RED, "[ERROR]"),
}
def custom_log(log_level: str, log_content: str) -> None:
"""打印自定义颜色日志。
Args:
log_level: 日志级别,支持 'SUCCESS'、'WARNING'、'ERROR'(不区分大小写)。
log_content: 日志内容。
"""
level_key = log_level.upper()
color, label = _LEVEL_CONFIG.get(level_key, (_RESET, f"[{level_key}]"))
print(f"{color} {label} {log_content}{_RESET}")
未知
这是我开发了几天下来最大的感受:我是菜鸡,我其实啥也不会。毕竟第一次去着手写这种相对较为大型的 API 来说,很多问题与标准我都要问AI 和交给 Agent 解决。
目录结构
这是一个小细节,然而值得去打磨,以给后期开发奠定基础。
目前的目录结构是这样的,那天我问了ds很多问题:比如数据库连接器算不算 helper?firewall 应该放哪里?经过几次打磨,最终成了这样一个相对较为清晰的架构:
数据层
ORM
ORM 这个东西我经常在一些项目上见过,主打一个安全,预防 SQL 注入(我之前那个项目甚至手动拼接 sqlcommand,想想还是有点怕的),然而我对此并不熟悉,所以交给AI解决了。
DAO 与 DTO
DTO 我先前在 Mx-Space 的源码里见过,然而当时没有仔细了解。
DAO 则是我在与 ds聊天过程中了解的。
那么二者有什么区别呢:
DAO(数据访问对象)负责封装数据库的增删改查操作,关注的是“如何存储”数据;DTO(数据传输对象)则是一个简单的容器,用于封装需要传输的数据,关注的是“如何传递”数据。
好吧实际上我在正式开发之前是打算在某个 API 文件里直接调用数据库的,但实际开发如此正式,也算学到了。
Controller 与 Helper
这二者也是我先前很模糊的概念,现在大概明白了点,就是“餐厅里值班经理与服务”的关系。后者仅是前者调用的一种。
开发规范
太好笑了,我一个人竟然需要查看AI写的《数据库使用指南》,好吧,我是菜鸡,我确实得学。
测试系统的搭建
不想自己写,所以交给 AI 去写了,后期有文件要 Test 也交给 AI 吧。
结
目前 Tinder 已更新到了 V0.2.3,但实际建起的部分更多是辅助,API 部分除了/以外都没开发,任重而道远啊。
下次commit应当是高考完了
距离高考还剩 105 天,祝一切顺利。