iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
自我挑戰組

與AI搶奪意識ing系列 第 18

把功能做成API

  • 分享至 

  • xImage
  •  

Q:如果功能要做成API你會建議怎麼開始?
A:
先想清楚要提供什麼服務
• 功能的核心是什麼?(例如:付款請求、查詢帳單、產生 token…)
• 這個 API 給誰用?(前端、第三方、內部服務)
• 輸入跟輸出長什麼樣子?(例如接收 JSON,回傳 JSON)

選框架
因為你在練習 Django + DRF (Django REST Framework),很適合用來開 API。

寫 serializer & view
例如一個付款請求 API:

設URL

測試
用 pytest-django 或 DRF test client 去測

Q:寫 serializer & view?
A:
為什麼要有 serializer?
• API 收到的資料通常是 JSON(例如前端送 {"amount":500,"currency":"TWD"})。
• Django/DRF 需要把這些 JSON → Python 物件 → 驗證正確性。
• 同樣地,回傳時 Python 物件也要轉回 JSON。
👉 這個轉換/驗證工作就是 serializer。

為什麼要有 view?
• view 就是 API 的入口。
• API 收到 request → 丟給 serializer 驗證 → 執行邏輯 → 回傳 Response。

Q:把這些給我一個圖示
A:
[使用者 / 前端]
│ (送出 JSON 請求)

┌───────────────┐
│ API View │ ← Django REST Framework
└───────────────┘
│ (把資料丟給)

┌───────────────┐
│ Serializer │ ← 驗證 & 格式化資料
└───────────────┘
│ 驗證成功?
┌─────┴──────┐
│ │
YES NO
│ │
▼ ▼
處理付款邏輯 回傳錯誤
│ │
▼ ▼
回傳成功 JSON {"error": "..."}
(含 transaction_id)

Q:DRF (Django REST Framework),可以發揮什麼功能?
A:
Django REST Framework (DRF) 是 Django 裡最常用來做 API 的工具包。它幫你把 Django 變成一個「API 工廠」,少掉很多重複工作。

DRF 可以發揮的主要功能

  1. 資料序列化 / 反序列化
    • Python 物件 ↔ JSON 互相轉換
    • 內建驗證(型別、長度、格式)
    👉 用 Serializer 或 ModelSerializer

  1. 快速 CRUD API
    • 搭配 ModelSerializer + ViewSet 幾行就能做 增刪改查
    👉 不用自己手寫全部 view

  1. 驗證與權限
    • 內建:登入驗證、權限控制
    • 支援 Token / JWT / Session
    • 可以設定哪些 API 給誰用

  1. 瀏覽器可視化 API 頁面
    • 只要裝了 DRF,你開 API URL 就會看到一個「可操作的網頁」
    👉 開發測試超方便(像 Postman 內建在 Django 裡)

  1. 分頁 / 過濾 / 搜尋
    • 只要開啟設定,就能自動幫 API 加上:
    • 分頁 (page=1&page_size=10)
    • 過濾 (?status=paid)
    • 搜尋 (?search=keyword)

  1. 多種回應格式
    • JSON(最常用)
    • 也可以輸出 XML、CSV、甚至自定義格式

  1. 錯誤處理 / 狀態碼管理
    • 會自動處理 400, 401, 403, 404…
    • 回傳標準化的錯誤格式

  1. 測試支援
    • 內建 APIClient → 寫測試更簡單
    👉 比 Django 原生的 Client 更適合測 API

Q:給我一個示意圖看看吧!
A:
[ 使用者 / 前端 / App ]
│ (送出 HTTP 請求: JSON / GET / POST ...)

┌───────────────────────────┐
│ Django REST Framework (DRF)│
└───────────────────────────┘


┌──────────────┐
│ 路由 (urls) │ ← 決定進哪個 API endpoint
└──────────────┘


┌──────────────┐
│ View(ViewSet, APIView) │ ← 控制流程
└──────────────┘


┌──────────────┐
│ 驗證 (Authentication) │ ← Token / JWT / Session
└──────────────┘


┌──────────────┐
│ 權限 (Permissions) │ ← IsAuthenticated / IsAdmin...
└──────────────┘


┌──────────────┐
│ 序列化器 (Serializer) │ ← 驗證資料格式 & 轉換 JSON ↔ Python
└──────────────┘


┌──────────────┐
│ 商業邏輯 (處理付款/查資料...) │
└──────────────┘


┌──────────────┐
│ Response │ ← 自動處理 HTTP 狀態碼 & 格式
│ (JSON / XML...) │
└──────────────┘


[ 使用者收到標準化回應 ]

Q:Authentication 如果我系統已經有驗證機制 可以套用?
A:
完全可以!💡 這正是 DRF 的強項之一:它的 Authentication 系統是「可插拔的 (pluggable)」,你可以直接套用你現有的驗證機制,或自訂一個。

•	已經有登入系統 (Django Session) → 用 SessionAuthentication
•	已有 Token 機制 → 用 TokenAuthentication
•	自訂/第三方驗證 → 自寫一個 BaseAuthentication 類別

這樣問下來,目前要做什麼似乎django都可以做到啊!!


上一篇
ngrok嵌入被降等http,X-Frame-Options 的deny問題
下一篇
i18n
系列文
與AI搶奪意識ing21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言