在上一篇文章中,我們建立了免費的 Azure Cosmos DB,並將 FastAPI 服務運行在 GitHub Codespaces 中,還沒看過上一篇的朋友建議從以下連結開始觀看。
而在本篇文章中,將會介紹使用 Python SDK 連線 Cosmos DB,並且整合 FastAPI 進行基本的 CRUD 操作,完整程式碼歡迎參考下方 GitHub 連結。
相關連結:【Azure Cosmos DB】使用 Python FastAPI 在 Cosmos DB 上的 CRUD 操作(上)
相關連結:https://github.com/charliewei0716/python-fastapi-azure-cosmos-db-todo-list
與 Azure Cosmos DB 建立連線
首先我們必須與 Azure Cosmos DB 帳戶建立連線,在程式碼中,我們將使用套件 dotenv 來管理連線資訊,切記絕對不要將敏感資訊直接寫在程式碼中。
透過 FastAPI 的生命週期管理機制,確保在應用啟動時順帶實例化 CosmosClient,以留做後續程式使用這個物件,這個寫法並不是必要的,但是一個建議的做法。
再者有賴於 FastAPI 直接支援非同步寫法,在 SDK 的選擇上就能盡量使用像 azure.cosmos.aio 的非同步版本,在後面的程式碼中也可以注意 async 與 await 的出現。
這邊使用的 create_database_if_not_exists 與 create_container_if_not_exists 都是 SDK 內建的功能,算是非常好用的設計。
ToDoItem
使用 FastAPI 與 pydantic 先定義好資料模型有很多好處,除了後續可以以物件的方式來存取資料,還附帶了 API 呼叫時的自動格式驗證與生成 API 文件等功能,我們依照情境定義了如下欄位。
CRUD
完成以上後就可以進入重點的 CRUD 操作了,首先第一個 Create 操作可以直接對應到 SDK 的 create_item 方法。
而 Read All 則是使用 SDK 中的 read_all_items 方法,並透過 async for 逐一打印出。
Update 操作是 CRUD 中較複雜的,基本的想法就是比較新舊 item 中 key 的差異,再使用 SDK 的 replace_item 方法來完成 Update 操作。
最後的 Delete 操作是最簡單的,直接根據 id 使用 delete_item 方法就可以了。
以上就是基本的 CRUD 操作範例,因為事先定義好了資料模型,搭配 SDK 內建的各項功能,端點的寫法整體看起來乾淨簡單,簡短數行就能完成所有動作。
測試 API
直接使用 FastAPI 自帶的 Swagger UI 來測試是最快速方便的,只要照著「Create」→「Read」→「Update」→「Delete」的順序,點擊上方的「Try it out」按鈕,就能逐一測試每個 API 囉!
測試 API |
總結
近期因為各項 AI 應用連帶興起的 Azure Cosmos DB,搭配在 Python 中本身就非常熱門 FastAPI 框架,可說是一個非常萬用的組合,結合 Cosmos DB 的快速回應能力與 FastAPI 的高效能、高穩定特性,再加上如同這個 Todo List 範例般的精簡開發效率,真的讓我在近期規劃的架構中,都不免要考慮一下這個方案 😆
相關連結:https://github.com/charliewei0716/python-fastapi-azure-cosmos-db-todo-list
留言
張貼留言