一、什麼是Flask和RESTful API?¶
Flask是一個輕量級的Python Web框架,它簡單靈活,適合快速開發小型Web應用和API。而RESTful API(Representational State Transfer)是一種軟件架構風格,用於創建可擴展、可維護的Web服務。它基於HTTP協議設計,通過資源(如用戶、商品)和HTTP方法(GET/POST/PUT/DELETE)實現數據的增刪改查。
二、安裝Flask¶
在開始前,確保已安裝Python環境。使用pip安裝Flask:
pip install flask
三、第一個Flask API:Hello World¶
創建一個簡單的API接口,返回“Hello, Flask!”:
from flask import Flask, jsonify
# 初始化Flask應用
app = Flask(__name__)
# 定義路由:訪問/hello時返回Hello, Flask!
@app.route('/hello', methods=['GET'])
def hello():
return jsonify(message="Hello, Flask!") # 返回JSON格式數據
# 運行應用(僅在直接執行該腳本時生效)
if __name__ == '__main__':
app.run(debug=True) # debug=True 開啓調試模式,代碼修改後自動重啓
運行測試:在終端執行python app.py,然後在瀏覽器或Postman中訪問http://localhost:5000/hello,即可看到返回結果。
四、RESTful風格基礎:資源與HTTP方法¶
RESTful API的核心是“資源”和“HTTP方法”,需牢記以下原則:
- 資源命名:使用名詞表示資源(如/todos表示“待辦事項集合”,/todos/1表示單個待辦事項)。
- HTTP方法對應操作:
- GET:獲取資源(讀操作)
- POST:創建資源(寫操作)
- PUT:更新資源(全量更新)
- DELETE:刪除資源(刪操作)
- 狀態碼:返回不同狀態碼錶示操作結果(如200=成功,201=創建成功,404=資源不存在)。
五、實戰:構建待辦事項(Todo)API¶
以“待辦事項”爲例,實現完整的RESTful API,包含增刪改查功能。
1. 初始化模擬數據¶
用內存列表模擬數據庫,存儲待辦事項:
from flask import Flask, jsonify, request
app = Flask(__name__)
todos = [] # 模擬數據庫:存儲待辦事項字典
next_id = 1 # 待辦事項ID自增
2. 創建資源集合:獲取/添加待辦事項¶
- 獲取所有待辦事項(GET):訪問
/todos返回全部待辦。 - 添加新待辦事項(POST):通過JSON傳遞內容,創建新待辦。
@app.route('/todos', methods=['GET', 'POST'])
def todos():
if request.method == 'GET':
# GET:返回所有待辦事項
return jsonify(todos)
elif request.method == 'POST':
# POST:從請求中獲取待辦內容
global next_id
new_todo = {
'id': next_id,
'content': request.json.get('content', '未填寫內容'), # 獲取JSON參數
'done': False # 默認爲未完成
}
todos.append(new_todo)
next_id += 1
return jsonify(new_todo), 201 # 201=創建成功
3. 單個資源操作:獲取/更新/刪除¶
針對單個待辦事項(如/todos/1),通過ID定位資源:
@app.route('/todos/<int:todo_id>', methods=['GET', 'PUT', 'DELETE'])
def single_todo(todo_id):
# 先找到目標待辦事項
todo = next((t for t in todos if t['id'] == todo_id), None)
if not todo:
return jsonify(error="待辦事項不存在"), 404 # 404=資源不存在
if request.method == 'GET':
return jsonify(todo) # 返回單個待辦事項
elif request.method == 'PUT':
# 更新待辦事項(全量更新)
todo['content'] = request.json.get('content', todo['content'])
todo['done'] = request.json.get('done', todo['done'])
return jsonify(todo)
elif request.method == 'DELETE':
# 刪除待辦事項
todos.remove(todo)
return jsonify(message="待辦事項已刪除"), 200 # 200=成功
六、測試API接口¶
推薦使用Postman或curl測試接口,以下是常用命令示例:
- 獲取所有待辦:
curl http://localhost:5000/todos
- 添加新待辦:
curl -X POST -H "Content-Type: application/json" -d '{"content": "學習Flask"}' http://localhost:5000/todos
- 獲取單個待辦:
curl http://localhost:5000/todos/1
- 更新待辦:
curl -X PUT -H "Content-Type: application/json" -d '{"content": "學習Flask API"}' http://localhost:5000/todos/1
- 刪除待辦:
curl -X DELETE http://localhost:5000/todos/1
七、進階學習方向¶
掌握基礎後,可繼續學習以下內容:
- 路由參數與類型轉換:如/<int:user_id>獲取整數ID。
- 請求數據驗證:使用marshmallow或pydantic校驗輸入合法性。
- 數據庫集成:通過SQLAlchemy連接MySQL/PostgreSQL,實現持久化存儲。
- 認證授權:使用JWT或Session實現用戶身份驗證。
八、總結¶
Flask是快速開發API的理想工具,RESTful風格則讓API更規範、易維護。通過本文的Todo API示例,你已掌握資源設計、HTTP方法應用和數據處理核心技巧。後續可結合數據庫和中間件(如Gunicorn部署),進一步擴展API功能。
開始動手實踐吧!從最簡單的接口到完整項目,逐步提升你的API開發能力~