基于Flask开发企业级REST API应用(一)
關(guān)于我
編程界的一名小小程序猿,目前在一個創(chuàng)業(yè)團(tuán)隊(duì)任team lead,技術(shù)棧涉及Android、Python、Java和Go,這個也是我們團(tuán)隊(duì)的主要技術(shù)棧。
Github:github.com/hylinux1024
微信公眾號:angrycode
前面對Python WEB框架Flask的源碼進(jìn)行走讀,對服務(wù)的啟動流程、路由原理和模板渲染有了一個宏觀的認(rèn)識。不過說了那么多理論,接下來就利用Flask開發(fā)一個企業(yè)級的API應(yīng)用。
我選用團(tuán)隊(duì)最近開發(fā)的一個企業(yè)應(yīng)用作為案例。這是一個戀愛交友應(yīng)用,本來是使用Java的SpringBoot框架進(jìn)行開發(fā)的,不過為了避免不必要的麻煩,我會使用Flask進(jìn)行改造,當(dāng)然這個案例我還會精簡一下,保持核心業(yè)務(wù)的同時,重點(diǎn)關(guān)注其中涉及到的技術(shù)和工具庫的使用,最大限度的還原項(xiàng)目開發(fā)的完整流程。
0x00 技術(shù)棧
這里我們使用Python版本為3.7,WEB框架當(dāng)然就是Flask,數(shù)據(jù)庫使用MySql,ORM使用SqlAlchemy,使用Redis作為緩存,可能還會使用到序列化工具庫marshmallow。
開發(fā)環(huán)境使用venv,部署服務(wù)環(huán)境會使用nginx+gunicorn+supervisord
因此整個技術(shù)棧為
# 開發(fā)技術(shù)棧 Python3.7+venv+Flask+MySql+SqlAlchemy+Redis+marshmallow # 部署技術(shù)棧 Python3.7+venv+nginx+gunicorn+supervisord 復(fù)制代碼當(dāng)然企業(yè)實(shí)際開發(fā)中還需要編寫接口文檔,用于各端同學(xué)的交互。我們可以使用postman或者淘寶的API文檔服務(wù)。
0x01 項(xiàng)目設(shè)計(jì)
技術(shù)選型做好之后,先不急于寫代碼,而是先把項(xiàng)目前期的設(shè)計(jì)做好,根據(jù)業(yè)務(wù)需求理清功能模塊、數(shù)據(jù)庫表結(jié)構(gòu)、接口文檔等。
我們的需求是做一個戀愛交友的應(yīng)用,那么它主要功能模塊就應(yīng)該有
- 登錄注冊
這里使用用戶手機(jī)號進(jìn)行登錄注冊 - 用戶列表
用戶登錄后,可以查看當(dāng)前熱門推薦的用戶 - 聯(lián)系人列表
聯(lián)系過的用戶,會出現(xiàn)在聯(lián)系人列表中 - 聊天模塊
給用戶發(fā)送消息,消息類型包括文本、語音等 - 附近的人
根據(jù)用戶登錄的地理位置,查看附近的人 - 誰看過我
查看誰看過我,這個可以作為VIP功能 - 個人信息
包括用戶基本信息、用戶相冊和用戶標(biāo)簽等 - VIP模塊
當(dāng)用戶充值為VIP后可以解鎖一些功能,比如查看誰看過我的列表等
注意為了避免項(xiàng)目開發(fā)周期過長我們主要關(guān)注前臺api的開發(fā),對于后臺管理功能暫時不考慮。
根據(jù)這些功能模塊,我們對項(xiàng)目中的實(shí)體進(jìn)行抽象主要有
- 登錄授權(quán)user_auth
- 用戶基本信息user_info
- 用戶位置location
- 用戶相冊user_album
- 用戶標(biāo)簽user_label
- 標(biāo)簽label
- 聯(lián)系人contacts
- 消息message
- 訪問足跡visitor
- 充值VIP的商品product
有月度VIP、季度VIP和年度VIP三種 - 訂單user_order
- 用戶VIP信息vip_info
這些實(shí)體在數(shù)據(jù)庫建模中分別對應(yīng)各自的表。避免代碼篇幅太長,這里就不再貼出各表腳本代碼。關(guān)于sql表結(jié)構(gòu)會在后面的項(xiàng)目地址中給出。
0x02 數(shù)據(jù)庫
我這里使用的是騰訊云的數(shù)據(jù)庫,當(dāng)然使用本地的數(shù)據(jù)庫也是可以的。
各表的字段如下圖
注意這些表我都沒有加外鍵約束。
0x03 項(xiàng)目框架搭建
我使用PyCharm作為開發(fā)環(huán)境的IDE,創(chuàng)建了一個名為DatingToday項(xiàng)目,結(jié)構(gòu)如下
(venv) ? DatingToday tree -L 1 . ├── app.py ├── datingtoday.sql ├── requirements.txt ├── static ├── templates └── venv 復(fù)制代碼注意到我已經(jīng)把數(shù)據(jù)庫腳本文件放在項(xiàng)目根目錄了。
venv環(huán)境安裝了以下依賴庫
可以使用命令
(venv) ? pip freeze > requirements.txt 復(fù)制代碼生成requirements.tx文件。
使用命令
(venv) ? pip install -r requirements.txt 復(fù)制代碼還原虛擬環(huán)境中的依賴。
0x04 總結(jié)
本篇是基于Flask開發(fā)企業(yè)級API應(yīng)用的第一篇,主要是對項(xiàng)目開發(fā)前期的準(zhǔn)備工作,包括項(xiàng)目設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)以及項(xiàng)目結(jié)構(gòu)搭建,當(dāng)然實(shí)際工作中可能還會先出API文檔,讓前端的同學(xué)可以先動起來,但我這里因?yàn)橐呀?jīng)是在寫文檔了,所以API文檔就省略了。磨刀不誤砍柴工,這些工作都是必需的。
0x05 項(xiàng)目地址
github.com/hylinux1024…
0x06 學(xué)習(xí)資料
- palletsprojects.com/p/flask/
- realpython.com/flask-conne…
轉(zhuǎn)載于:https://juejin.im/post/5d3bc3d25188254cbc32b1cc
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的基于Flask开发企业级REST API应用(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 委托之初识(一)
- 下一篇: 如何实现动态水球图 --》 echa