初學 Python Flask 的 RESTful API 設計 — Udemy 課程心得

by 好豪
Published: Last Updated on

Flask 是 Python 精簡、好上手的 Web 後端框架,我在 Udemy 上只花不到一個月的下班後時間,就上完 REST APIs with Flask and Python 這門課,講師的教學相當好理解、課程的程式碼也用容易讀懂的方式撰寫。

這篇筆記將寫下我在課程內學到什麼、為什麼值得學習、以及我為何喜歡這門課程。

提醒:本文撰寫於 2020 年,而本課程講師於 2022 年全面更新了課程,內容同樣高品質,只是講師使用的擴充工具(Extension)已經以時俱進更新,會與本文略有不同,筆者未來學完更新版的課程後,再跟各位分享新的心得

這門課教的 RESTful API 究竟是什麼?

API 是應用程式介面(Application Programming Interface),根據 Wikipedia 的說明:它定義程式之間的互動,以及可以進行的呼叫或請求的種類,如何進行呼叫或發出請求,應使用的資料格式,應遵循的慣例等。

RESTful API 則是客戶端與伺服器端的溝通方式。我們用手機或電腦瀏覽器上網是為客戶端,這門課 將學習伺服器端該如何設計以服務客戶端,達成功能例如:

  • 讓客戶端可以取得他們需要的資料
  • 驗證使用者的帳號密碼
  • 以及串連資料庫,讓資料得以更新與儲存

為什麼資料科學家也需要學?

好豪一直以來從事的資料科學工作,機器學習專案的成品形式包括訓練好的模型、或者演算法設計等等,共同問題在於:該如何更有魅力地呈現機器學習專案?

如果我要面對的是 CEO、不同部門的同事、或者開源專案的火力展示,單純秀出預測準確率多少,實在不夠耀眼。我認為一個展示自己機器學習專案好方法,是建立 最簡可行產品(Minimum Viable Product),換言之,要讓使用者透過簡單幾個操作,就能親身體驗到你的機器學習專案有多大威力。

這門 Udemy 課程 學習基礎後端知識後,我學會如何在 Python 使用 Flask 在伺服器端部署我的應用程式,資料科學家可以將訓練好的機器學習模型放上伺服器端,讓任何人都能輕鬆使用。例如,你可以把垃圾簡訊分類模型部署在伺服器端:

  • 接收使用者自己從網頁瀏覽器輸入的任意簡訊訊息
  • 在伺服器運算並判斷
  • 最後將模型分類結果回傳、並用網頁的方式呈現
範例:在伺服器端部署的垃圾簡訊分類模型,讓全世界任何人都能使用你的作品(Source: Chayan Kathuria

課程特色

重構式教學

這門 Udemy 課程 在課程開頭只用一個小時的時間,就完成了有完整 CRUD 功能的 RESTful API 程式!

之後的每個小節,都是針對這個基礎程式各個部分的重構(Refactor)、讓程式碼更簡潔,並且一點一滴地加上更多功能:

  • 資料需要長期儲存,就串接資料庫
  • 部分功能需要會員限定,就加上帳號密碼驗證
  • 需要連線加密,再加上 SSL 憑證設定

逐漸重構的教學方式,很容易跟上課程的節奏。如果你想設計的後端程式不需要那麼多功能(例如暫時不需要資安保護),就算只看一半的課程,也會有很大的收穫。

測試驅動開發

開發程式的時候,我們會不斷更新程式碼、以及整個程式的功能,如何確保新功能符合預期行為、以及舊功能沒有因為修改出現 Bug 呢?測試驅動開發(TDD)就是一種解決方案。

產品設計者可以先寫好預期的行為,程式開發者寫出來的程式只要執行結果確實符合預期的行為,那程式的正確性就八九不離十了,例如:

  • 如果不是會員,使用者不可以瀏覽商店內容
  • 如果客戶端要求看到某產品資訊,要回傳產品名稱跟價格
  • 如果使用者申請會員卻沒有填寫密碼,應該要申請失敗並且回傳資料不完整的錯誤資訊

課程中使用 Postman 進行 API 整合測試,程式每添加一個新功能,就用 Postman 有規則地檢查功能是否符合預期,若有任何部分不符合預期、可以即時反應並修改。講師也詳細介紹如何活用 Postman 的環境參數功能讓開發過程正確性與效率都更高。

Flask 以及他的快樂夥伴

Python 的 Flask 後端開發框架(Source: Flask

比起另個 Python 熱門的後端框架 Django 本身就包含多項工具的「內附電池的哲學」,Flask 是一個相當簡潔的 Web 後端框架,專注在最基本的功能,當你需要的時候其他功能再擴展(Extention)即可。在 這門 Udemy 課程 採用的框架擴展包含:

  • Flask-RESTful:讓 RESTful API 程式碼更簡潔、有序
  • Flask-JWT:加上驗證使用者身份的功能
  • Flask-SQLAlchemy:簡化資料庫串接,以及對資料庫進行 ORM 操作(不用 SQL 語法、用 Python 程式碼就能操作資料庫)

使用 Flask 這種高擴充性框架的另個好處是,你可以隨著你的喜好改變 Extention 的選擇,不被框架自身限制。上完這門課之後,如果你找到了比課程教材更好用的 Extention,只需要修改該 Extention 相關的程式碼即可,程式功能的擴張與修改都相當靈活

作品部署

不論你是公司內部的產品開發、或者正在準備面試,要為你努力完成的作品爭取目光,好豪認為部署上線是相當重要的部分!這門課會教你兩種作品部署的方式:

  • 簡單:使用 Heroku 的雲端平台服務、快速讓你的作品上線
  • 進階:租用伺服器,需要什麼都自己設定

完成部署後,任何人都可以使用你的程式玩玩看,再也不用把筆電搬到對方面前才能展示作品了!



這門課適合什麼樣的人?

這門課適合任何有興趣入門 Python、Flask、或者網頁後端開發的人!

不需要任何先備知識,只要會用 Python 寫出 “Hello World!” 就可以開始上課。就算你剛開始學 Python 沒多久也不用害怕,課程內包含五個小時的 Python 複習影片,並且內容完全不馬虎,即使我玩 Python 好一陣子了,還 有些 Python 知識 也是看了複習影片才學會的!

結語

作為軟體工程師或資料科學家,累積作品集與 Side Project 是相當重要的,而要好好呈現你的作品,不論是網頁或者機器學習模型,學會基本的後端開發與部署是不可或缺的技能。好豪在 2021 年的資料科學競賽 中,就用上了這門課學會的 Flask 技能,快速方便地部署機器學習模型。如果你喜歡 Python、而且對後端開發還不熟悉,Udemy 的 REST APIs with Flask and Python 這門課很適合入門自學!


你喜歡線上課程自學程式設計嗎?也推薦你閱讀我的 Udemy 自學資料結構與演算法心得

又或者你是 Python 熱愛者?或許好豪整理的《Python 神乎其技》免費教學文章 會對你有幫助!

如果這則筆記有幫助到你,歡迎追蹤 好豪的粉絲專頁,我會持續分享 Python 以及資料科學相關文章;也可以點選下方按鈕分享,讓更多想提升 Python 技能的朋友看到!

推薦閱讀