歡迎光臨
每天分享高質量文章

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

在前面呢小編準備了一份Python Web開發的學習資料,需要的同學可以加小編QQ群:696541369獲取!

如何解放路由管理

1. 痛點

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

2. 解決方案

  • 既然路由檔案隨著業務的擴充套件越來越龐大,那就去掉路由檔案。
  • 制定對應規則,路由透過API檔案名根據一定的規則對應類名,然後自動匯入對應實現類,註冊到Web框架中。

2.1 制定規則

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

  1. 程式碼目錄結構,列一下簡單的專案檔案目錄,下麵以flask框架為例:
  2. app.py是啟動檔案。
  3. resources是API介面程式碼檔案夾。
  4. services是為API介面服務的函式封裝檔案夾。
  5. 如果專案還有依賴檔案,也可以單獨再建其他檔案夾。
  6. 專案的API介面程式碼均放在resources檔案夾下,且此檔案夾只能寫介面API服務程式碼。
  7. 介面名稱命名以_連線單詞,而對應檔案裡的類名檔案名稱的單詞,不過換成是駝峰寫法。
  8. 類的匯入則透過檔案名對應到類名,實現自動對映註冊到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
  1. 路由入口檔案會自動對映,對映規則為:
  2. 字首 / 專案檔案夾[…] / 檔案名
  3. 其中 字首為整個專案的路由字首,可以定義,也可以不定義,比如api-ab專案,可以定義整個專案的路由字首為 ab/
  4. resource下麵專案檔案夾如果有,則會自動拼接,如果沒有,則不會讀取。
  5. 舉例
  6. 字首為空,上圖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引數是將已經線上存在的路由替換新規則生成的路由,這樣舊專案也是可以最佳化使用這套規則。

3. 應用到專案中

以flask框架為例,其餘框架請看github中的程式碼演示。

app.py 中程式碼

總結: 至此,透過制定一定規則,解放路由管理檔案方案完成。 歡迎各位一起討論其餘比較好的方案。

 

    贊(0)

    分享創造快樂