【Python 技術選型】如何選出適合的API框架呢?

2024/03/12閱讀時間約 4 分鐘
raw-image



當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端時代的來臨, 所有的繁重工作都可以在遠處而不會是各台手機或者電腦, 那麼這些裝置究竟要怎麼跟遠處的伺服器溝通呢? 這中間的溝通格式就是API(應用程式介面), 也就是機器與機器之間能夠理解的語言。


那麼Python的生態圈也誕生了許多的API框架, 包括最早期的Django, 以及中期發展的Flask, 到最後的新星 FastAPI, 各個框架都有各自的優劣之處, 並非絕對的好壞, 而是取決於我們什麼樣的需求選擇什麼樣的框架, 那麼這邊就稍微列出三者的優缺點與適用場景。


Django、Flask、FastAPI 應該如何選擇呢?

Django

💡 最早期的一套框架, 功能也非常的完整, 但包袱太大, 早期以WSGI進行開發, 後期才加入ASGI, 至於好不好用就需要自行研讀囉! 就像是老屋翻新一樣, 有的人覺得習慣,但有的人卻喜歡較新的格局設計。

優點:

  • 完整的生態系統,提供了ORM、表單處理、認證等功能。
  • 社群龐大,有豐富的第三方函式庫和文件支援。
  • 自帶的管理後台可快速建立和管理資料模型。

缺點:

  • 相對於輕量級框架,Django 學習曲線較陡。
  • 靈活性相對較低,對於特定需求的客製化可能需要花費更多時間。

適用場景:

  • 中大型 Web 應用程式開發。
  • 對安全性和穩定性要求較高的項目。
  • 需要內建管理後台或有大量 CRUD 操作的項目。

Flask

💡 中期發展的框架, 也相對的成熟, 但與 Django 一樣初期基於WSGI後續才加入了ASGI。

優點:

  • 輕量級且靈活,可根據需求自由選擇擴展。
  • 學習曲線較低,容易入門。
  • 高度可自訂,可根據專案需求選擇不同的庫和插件。

缺點:

  • 對於大型應用程序,需要手動選擇和配置各種組件,增加了開發工作量。
  • 由於靈活性,可能需要花費更多時間來建立一些高級功能。

適用場景:

  • 小型專案或原型快速開發。
  • 需要客製化程度高、對效能要求不是很高的專案。
  • 對於單一功能的微服務。

FastAPI

💡 後起的新秀, 整合了WSGI與ASGI的協議規範, 讓同步與非同步的傳輸協議更加的自然。

優點:

  • 極為快速,效能優異,支援非同步請求處理。
  • 自動產生互動式 API 文檔,簡化了 API 文件編寫和維護的工作。
  • 類型提示支持,提高了程式碼的可讀性和可維護性。

缺點:

  • 相對較新,社區生態可能不如 Flask 和 Django 穩定和完善。
  • 學習曲線相對較陡,特別是對於不熟悉非同步程式設計的開發者。

適用場景:

  • 需要高效能的 API 服務,特別是在處理大量請求或需要高並發效能的情況下。
  • 對 API 文件產生和維護要求較高的項目。
  • 對於即時性要求較高的應用場景,如聊天應用程式、即時通知等。


什麼是WSGI與ASGI

上述的簡介我們常常提到WSGI與ASGI, 這兩者究竟是什麼呢? 歡迎參考:

🌀 【Python 知識科普】 關於WSGI與ASGI


我們除了列出優缺之外, 更重要的是釐清需求

在這邊我們試著盡可能的實際列出開發上的需求, 那麼假設我們的應用是一個語音辨識引擎…, 那麼可能會這樣去分析我們所需的框架。

raw-image



從成本、品質、效率這三個面向去一一列出我們的需求並試著落在三者的區塊之上,最終就可以得出哪些部份對於我們的應用來說是比較需要的, 那麼就可以從刪去之後的面向去分析相關的框架,最終選出最適合的框架。

總結

框架的選擇取決於需求, 無論選擇哪種框架,都需要考慮專案規模、開發效率、效能、可維護性等因素。


Flask適合小型專案和需要框架靈活性的開發人員,Django適合建立複雜的Web應用程式和CMS,FastAPI適合建立高效能即時應用程式。


在選擇Python作為Web開發語言時,必須考慮專案的需求和特點,以及技術團隊和可用的時間和資源等因素。

91會員
259內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!