1. 程式人生 > >Python Web開發:教你如何解放路由管理,新手教程!

Python Web開發:教你如何解放路由管理,新手教程!

支持 find 擴展 例如 github ces 每天 RoCE 註冊

技術分享圖片
如何解放路由管理

  1. 痛點

隨著業務的飛速發展,API接口越來越多,路由管理文件從幾十號變成幾百上千行,且每次上新服務,需要在修改路由文件代碼,帶來一定的風險。

  1. 解決方案

既然路由文件隨著業務的擴展越來越龐大,那就去掉路由文件。
制定對應規則,路由通過API文件名根據一定的規則對應類名,然後自動導入對應實現類,註冊到Web框架中。
2.1 制定規則

下面這套規則只是其中一種方案,可以針對項目情況制定對應的規則,然後實現相關代碼,但是整體思路基本一樣。

代碼目錄結構,列一下簡單的項目文件目錄,下面以flask框架為例:
app.py是啟動文件。
resources是API接口代碼文件夾。
services是為API接口服務的函數封裝文件夾。

如果項目還有依賴文件,也可以單獨再建其他文件夾。
項目的API接口代碼均放在resources文件夾下,且此文件夾只能寫接口API服務代碼。
接口名稱命名以_連接單詞,而對應文件裏的類名文件名稱的單詞,不過換成是駝峰寫法。
類的導入則通過文件名對應到類名,實現自動映射註冊到web框架中。
規則舉例如下:

如上圖,resources下有一個hello_world接口,還有一個ab項目文件夾,ab下面還有一個hello_world_python接口以及子項目文件夾testab,testab下面也有一個hello_world_python.

接口文件的文件名命名規範:
文件名命名均為小寫,多個單詞之間使用‘_‘隔開,比如hello_world.py 命名正確,helloWorld.py命名錯誤。

接口文件裏的接口類Class命名是以文件名字轉為駝峰格式,且首字母大寫。比如hello_world.py 對應的接口類是 HelloWorld
舉例: hello_world.py
hello_world_python.py
路由入口文件會自動映射,映射規則為:
前綴 / 項目文件夾[...] / 文件名
其中 前綴為整個項目的路由前綴,可以定義,也可以不定義,比如api-ab項目,可以定義整個項目的路由前綴為 ab/
resource下面項目文件夾如果有,則會自動拼接,如果沒有,則不會讀取。
舉例:
前綴為空,上圖resources中的三個接口對應的路由為:

2.2 代碼實現

python很多框架的啟動和路由管理都很類似,所以這套規則適合很多框架,測試過程中有包括flask, tornado, sanic, japronto。 以前年代久遠的web.py也是支持的。

完整代碼地址:

https://github.com/CrystalSkyZ/PyAutoApiRoute

2.2.1 實現下劃線命名 轉 駝峰命名 函數,代碼演示:

2.2.2 實現根據字符串導入模塊函數, 代碼演示:

2.2.3 檢索resources文件夾,生成路由映射,並導入對應實現類, 代碼演示如下:

et_route_tuple函數作用是通過字符串導入類,並將路由和類以元組的方式添加到數組中。
check_file_right函數作用是過濾文件夾中不合法的文件。
recursive_find_route函數采用遞歸查找resources中的文件。
existing_route參數是將已經線上存在的路由替換新規則生成的路由,這樣舊項目也是可以優化使用這套規則。

  1. 應用到項目中

以flask框架為例,其余框架請看github中的代碼演示。

app.py 中代碼

總結: 至此,通過制定一定規則,解放路由管理文件方案完成。 歡迎各位一起討論其余比較好的方案。如果你跟我一樣都喜歡python,也在學習python的道路上奔跑,歡迎你加入python學習群:839383765 群內每天都會分享最新業內資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

Python Web開發:教你如何解放路由管理,新手教程!