“Commit small, commit often, write real messages.” 这句话刻在了我第一个FastAPI项目的Tagline上。不是因为我突然成了Git布道师,而是因为当你从零开始搭建一个只有一行路由、一个JSON响应的“hello-world”时,才真正看清:让项目朝着失控狂奔的,从来都不是代码复杂度,而是最开始那几分钟里被跳过的“无聊小事”。
所以这周我开始正经学后端开发,目标很小——让FastAPI在本地跑起来,返回点东西。完成后我却觉得,这比想象中更值得写下来。因为“装个包、跑个命令”这件事,回头看总是轻描淡写;只有身在其中才知道,一个干净的起点藏着多少岔路。
先说我是怎么把地基打牢的。第一步不是写代码,而是mkdir项目文件夹,然后立刻git init。为什么?因为一旦init,之后生成的每一个文件都会被Git的视线笼罩——再也没有“忘记初始化”这种懊恼。接着,在装任何一个包之前,我先创建了.gitignore文件,把venv/、pycache/、.env和.DS_Store这些注定不该进仓库的东西统统写进去。如果先建虚拟环境,Git会短暂地看到几百个库文件,再回头排除就手忙脚乱。这个顺序反不得。
.gitignore那一行命令本身也有玄机。我用了一个heredoc语法:cat > .gitignore << 'EOF',然后敲完想忽略的目录名,再用EOF收尾。它告诉bash“别找真文件,就把下面敲进去的文本当成输入,直到再次碰到EOF为止”。EOF只是约定俗成,改成BANANA也能跑——但这个约定之所以流行,是因为它一眼就能传达“文件内容到此结束”的意思。小连字符里,藏着可读性。
接着启动隔离环境。python -m venv venv,再用source venv/Scripts/activate激活,终端里的python和pip就指向了这个项目专属的天地。这意味着后续安装的任何包都只窝在venv/里,不会污染系统,也不会跟其他项目的依赖打架。当同事克隆你的仓库,只需同样跑一遍激活,就能复现完全相同的环境。
这些都做完了,我才开始碰FastAPI。真正让服务跑起来就两行:写好app.py,里面用@app.get("/")装饰一个返回字典的函数;然后uvicorn main:app --reload。打开浏览器访问/docs,自动生成的交互式API文档已经等在那里。就一个端点,但整个链路通了——从代码到文档,从开发体验到安全余量,全在第一天就位。
比代码更先就位的,是秘密的管理。我建了一个.env文件,把密钥、数据库地址这类敏感信息塞进去,然后再次确认它被.gitignore牢牢拦在仓库之外。别等到功能写了一大堆再回头清理密钥——那时的提交历史已经像脏脚印一样留在了仓库里。从第一天就隔离秘密,等于给整个项目的安全性打了一针疫苗。
最后,我开始写这份构建日志,把每个操作、每个“为什么这么做”都记下来。它既是笔记,也是一条额外的安全绳:日后回想时,不必靠模糊的记忆去猜当时动了什么。而贯穿始终的习惯其实就三条——小步提交,让每个改动都有清晰的叙述;提交信息说人话,写清动机而不仅仅是“update”;运行环境的纯净与秘密的隔离,绝不妥协。
一个hello-world能复杂到哪儿去?但恰恰因为足够简单,才暴露了那些决定项目成色的元工作。从init的时机,到.gitignore的排序,再到heredoc里的EOF——这些细节像脚手架,搭稳了,后面的建设才能轻装上阵。
热门跟贴