1. 前言
API(Application Programming Interface,應用程式介面)是一種讓軟體之間能夠相互通訊的機制。近年來,許多網頁服務與應用程式都提供 API,開發者可以透過這些 API 取得資料或進行系統整合。Python 因為語法簡潔、函式庫豐富,非常適合用於使用與開發 API。
本文將介紹關於「Python API」的基礎知識,並說明如何使用 Python 呼叫 API,甚至進一步開發自己的 API。
1.1 什麼是 API?
API(Application Programming Interface)是一種讓不同軟體或服務能共享資料與功能的機制。例如天氣預報 App 在取得氣象資料時,就會使用外部天氣服務提供的 API。
API 主要可應用於以下情境:
- 資料取得:例如社群平台貼文、天氣預報、股票資訊等
- 資料傳送:像是使用者註冊、表單送出、付款處理等
- 系統整合:將不同的應用或服務進行串接
API 有多種類型,其中最常見的是 REST API(Representational State Transfer API)。它透過 HTTP 通訊協定,讓客戶端(像是 App 或瀏覽器)與伺服器進行請求與回應的互動。
1.2 使用 Python 操作與建立 API 的優勢
Python 是非常適合用來操作或開發 API 的程式語言。以下列出幾個主要原因:
1.2.1 使用簡單的程式碼呼叫 API
Python 中常用的 requests
函式庫,只需幾行程式碼即可呼叫 API 並取得資料。
import requests
response = requests.get("https://api.example.com/data")
print(response.json()) # 顯示取得的資料
如上所示,Python 讓你可以輕鬆與 API 進行互動。
1.2.2 可使用功能強大的 Web 框架
Python 提供多種強大的框架可用來建立 API,其中最受歡迎的是 Flask 與 FastAPI。
- Flask:輕量、簡單,適合新手快速建立 API。
- FastAPI:活用 Python 的型別提示,打造高速且安全的 API。
1.2.3 擁有豐富的函式庫與擴充性
Python 擁有許多與 API 整合良好的函式庫,例如資料處理、機器學習、雲端服務整合等。
requests
:簡化 API 通訊json
:處理 API 回應中的 JSON 格式資料Flask
/FastAPI
:用來建立 API 的 Web 框架SQLAlchemy
:將 API 與資料庫連接的 ORM 工具
善用這些工具,可大幅提升開發效率。
1.3 本文將學到的內容
本文將完整說明如何使用 Python 來 呼叫 API 與 建立 API。
- 使用 Python 呼叫 API 的方法
- 使用
requests
進行 API 請求 - 處理 API 回應(JSON 解析)
- 實作錯誤處理
- 使用 Python 建立 API 的方法
- 使用 Flask / FastAPI 建立 Web API
- 與資料庫的整合
- 實作身份驗證與安全性
- Python API 的實務應用
- 部署至雲端平台(Heroku、AWS Lambda)
- 效能優化方法
無論是想學習如何使用 API,或是想打造自己的 API,本指南都能提供實用知識。接下來的章節將以具體程式碼說明 如何使用 Python 呼叫 API。
2. 如何使用 Python 呼叫 API【新手向】
使用 Python,可以呼叫外部 API 來取得或傳送資料。本章節將說明使用 Python 呼叫 API 的基本方式,內容包含以下幾個部分:
- 如何使用 Python 呼叫 API
- 使用
requests
函式庫發送 HTTP 請求 - 如何處理 API 的回應
- 錯誤處理與因應方式
3. 如何使用 Python 建立 API【Flask 與 FastAPI】
Python 提供了多種框架來建立 API,其中以 Flask 和 FastAPI 最受歡迎。這一章節將說明如何使用這兩種框架來建立 API。
本章節將涵蓋以下內容:
- 建立 Web API 的基本流程
- 使用 Flask 建立簡單 API
- 使用 FastAPI 建立高效能 API
- 與資料庫整合
- API 的安全性對策
3.1 如何建立 Web API?
建立 API 時,通常會依照以下步驟進行開發:
- 選擇框架(如 Flask 或 FastAPI)
- 設計 API 的端點(決定 URL 與資料內容)
- 定義請求與回應(使用 JSON 來傳遞資料)
- 與資料庫連接(可使用 SQL 或 NoSQL)
- 實施驗證與安全措施(如 API 金鑰或 JWT)
接下來會說明使用 Flask 和 FastAPI 開發 API 的方法。
3.2 使用 Flask 建立簡單的 API
Flask 是一個簡單且輕量的 Web 框架,非常適合用來快速開發小型 API。
3.2.1 安裝 Flask
首先需要安裝 Flask 函式庫:
pip install flask
3.2.2 使用 Flask 建立基本 API
以下是使用 Flask 建立簡單 API 的範例:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello, World!"})
if __name__ == '__main__':
app.run(debug=True)
程式碼說明
- 建立
Flask
實例 - 使用
@app.route
定義 API 路徑 - 使用
jsonify()
回傳 JSON 格式資料 - 執行
app.run(debug=True)
啟動本機伺服器
執行程式後,瀏覽 http://127.0.0.1:5000/api/hello
即可看到 “Hello, World!” 的 JSON 回應。
3.3 使用 FastAPI 建立高效能 API
FastAPI 是一款現代化的框架,支援 Python 3.7+ 的型別提示,可用來建立高速又安全的 API。
3.3.1 安裝 FastAPI
可透過以下指令安裝:
pip install fastapi uvicorn
(uvicorn
是執行 FastAPI 的 ASGI 伺服器)
3.3.2 使用 FastAPI 建立簡單 API
以下是 FastAPI 建立 API 的基本範例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/api/hello")
def hello():
return {"message": "Hello, FastAPI!"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
3.4 與資料庫整合
建立 API 時,通常會需要存取資料庫,以下說明如何使用 SQLite 和 SQLAlchemy 進行整合。
3.4.1 使用 SQLite 與 SQLAlchemy
先安裝所需函式庫:
pip install sqlalchemy sqlite
以下是與 Flask 結合的範例:
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
@app.route("/api/users", methods=["GET"])
def get_users():
users = User.query.all()
return jsonify([{"id": user.id, "name": user.name} for user in users])
if __name__ == "__main__":
db.create_all()
app.run(debug=True)
3.5 API 的安全性對策
將 API 公開時,務必考慮以下安全措施:
3.5.1 加入認證與授權機制
- 使用 API 金鑰:限制存取 API 的權限
- 使用 JWT(JSON Web Token):強化使用者驗證
3.5.2 驗證資料格式
FastAPI 可利用型別提示自動驗證輸入資料:
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class UserRequest(BaseModel):
name: str
age: int
@app.post("/api/users")
def create_user(user: UserRequest):
return {"message": f"{user.name}({user.age}歲)已註冊成功"}
小結
本章節介紹了如何使用 Python 建立 API,重點如下:
- 使用 Flask 建立簡單 API
- 使用 FastAPI 建立高效能 API
- 透過 SQLAlchemy 整合資料庫
- 強化 API 的安全性(驗證與資料檢查)
4. 如何部署 Python API
開發完成後,要讓 API 可以在雲端上運行,就必須進行部署。本章節將介紹幾種 Python API 的部署方式。
內容大綱如下:
- 在本地環境運行 API
- 部署至雲端平台的方法
- 使用 Heroku 部署
- 使用 AWS Lambda 進行無伺服器部署
- API 的效能優化方式
4.1 在本地運行 API
部署前,應先在本地端確認 API 是否正常運行。
4.1.1 執行 Flask 應用
請依以下步驟操作:
- 將 Flask 程式碼儲存為
app.py
- 在終端機執行下列指令
python app.py
執行後,Flask 應用將於 http://127.0.0.1:5000/ 運行。
4.1.2 執行 FastAPI 應用
使用以下指令啟動 FastAPI:
uvicorn main:app --host 127.0.0.1 --port 8000 --reload
啟動後,可於 http://127.0.0.1:8000/ 存取 API。
4.2 將 API 部署至雲端平台
在本地測試完成後,就可以部署至雲端平台。以下介紹兩種常見的部署方式。
4.2.1 使用 Heroku 進行部署
Heroku 是一個支援 Python 的雲端平台,可以快速部署應用程式。
Heroku 部署步驟
- 安裝 Heroku CLI
- 前往官方網站(https://devcenter.heroku.com/articles/heroku-cli)進行安裝
- 登入 Heroku 帳號
heroku login
- 初始化 Git 倉庫
git init
heroku create my-python-api
- 建立必要的檔案
requirements.txt
:列出所需函式庫flask gunicorn
Procfile
:Heroku 使用的程序定義檔案web: gunicorn app:app
- 提交 Git 並部署
git add .
git commit -m "Deploy API to Heroku"
git push heroku main
- 開啟應用程式網址
heroku open
至此,你的 Python API 已成功在 Heroku 上部署並公開使用。
4.2.2 使用 AWS Lambda 進行無伺服器部署
AWS Lambda 可以讓你無需管理伺服器就能在雲端執行 API。
AWS Lambda 部署 FastAPI 步驟
- 安裝 AWS Lambda 所需函式庫
pip install mangum
- 建立 FastAPI 應用(
main.py
)
from fastapi import FastAPI
from mangum import Mangum
app = FastAPI()
@app.get("/")
def hello():
return {"message": "Hello from AWS Lambda"}
handler = Mangum(app)
- 部署至 AWS Lambda
- 可透過 AWS API Gateway 整合
- 使用 AWS CLI 或網頁控制台上傳
這樣就能在不需啟用伺服器的情況下執行 API。
4.3 提升 API 效能的方法
部署後,可透過以下方式來提升 API 的回應速度與穩定性。
4.3.1 使用快取(Cache)機制
快取可以提升 API 回應速度、降低伺服器負擔。
- Flask 範例:
from flask_caching import Cache
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
@app.route('/data')
@cache.cached(timeout=60) # 快取 60 秒
def get_data():
return {"message": "Cached data"}
- FastAPI 範例:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
4.3.2 活用非同步處理
FastAPI 支援 非同步(async),可提升處理效率。
from fastapi import FastAPI
app = FastAPI()
@app.get("/async")
async def async_endpoint():
return {"message": "This is an async endpoint"}
4.3.3 使用負載平衡(Load Balancing)
當 API 流量變大時,可透過負載平衡分散壓力。
- 在 AWS 中使用 Elastic Load Balancer(ELB)
- Heroku 中可使用 Auto Scaling
小結
本章節介紹了如何將 Python API 部署到雲端平台,重點如下:
- 在本地測試 API
- 使用 Heroku 快速部署
- 透過 AWS Lambda 進行無伺服器部署
- API 效能優化技巧(快取、非同步、負載平衡)

5. Python API 常見問題(FAQ)
以下整理了關於 Python API 開發與使用的常見問題,適合初學者與中階開發者參考。
5.1 有哪些免費的 API 可以用來測試 Python?
初學者可以透過下列免費 API 服務進行測試與練習:
服務名稱 | 說明 | API 文件 |
---|---|---|
Random User API | 取得隨機使用者資訊 | https://randomuser.me |
OpenWeatherMap | 取得天氣資訊 | https://openweathermap.org/api |
JSONPlaceholder | 取得假資料(貼文、留言、使用者等) | https://jsonplaceholder.typicode.com |
5.2 Web 爬蟲與 API 有什麼不同?
兩者都是用來取得外部資料的方式,但原理與效率不同:
項目 | Web 爬蟲 | API |
---|---|---|
方法 | 解析 HTML 頁面取得資料 | 透過請求直接取得結構化資料 |
速度 | 較慢(需等待網頁載入) | 較快(直接存取資料) |
穩定性 | 網頁變動易導致錯誤 | 通常穩定可靠 |
合法性 | 過度抓取可能違反規範 | API 官方提供,使用安全 |
結論:如果有 API 可用,建議優先使用 API。
5.3 如何安全地管理 API 金鑰?
大多數 API 為了控制存取權限,會使用 API 金鑰(API Key),以下是安全管理方式:
5.3.1 使用環境變數儲存金鑰
請勿直接將金鑰寫入程式碼中,建議使用環境變數。
export API_KEY="your-secret-api-key"
import os
api_key = os.getenv("API_KEY")
print(f"API 金鑰: {api_key}")
5.3.2 使用 .env
檔案
也可使用 .env
檔案搭配 python-dotenv
套件:
API_KEY=your-secret-api-key
pip install python-dotenv
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("API_KEY")
print(f"API 金鑰: {api_key}")
5.4 Flask 與 FastAPI 有何差異?
項目 | Flask | FastAPI |
---|---|---|
設計理念 | 簡單輕量 | 高速並支援型別提示 |
效能 | 較慢(同步處理) | 較快(非同步處理) |
型別檢查 | 無(需手動) | 有(自動驗證) |
API 文件 | 需手動撰寫 | 自動產生(Swagger UI 等) |
適用情境 | 小型專案、學習用途 | 高速 API、正式環境 |
5.5 如何提升 API 效能?
5.5.1 快取(Cache)
快取可減少重複請求並提升回應速度:
- Flask 範例:
from flask_caching import Cache
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
@app.route('/data')
@cache.cached(timeout=60)
def get_data():
return {"message": "Cached data"}
- FastAPI 範例:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
5.5.2 使用 async 非同步處理
from fastapi import FastAPI
app = FastAPI()
@app.get("/async")
async def async_endpoint():
return {"message": "This is an async endpoint"}
5.5.3 使用負載平衡
API 請求量大時,建議使用以下方式分散負載:
- AWS Elastic Load Balancer(ELB)
- Heroku Auto Scaling
- Nginx 作為反向代理伺服器
小結
本章節解答了開發與使用 Python API 時的常見疑問,包括:
- 免費的測試 API
- Web 爬蟲與 API 的比較
- 安全地管理 API 金鑰的方法
- Flask 與 FastAPI 的差異
- API 效能優化技巧
善用這些知識,能夠開發出更安全、高效且易於維護的 API。
歡迎你實際動手試試看,開發屬於自己的 Python API!