Flask API開發:RESTful風格接口快速構建

一、什麼是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。
- 請求數據驗證:使用marshmallowpydantic校驗輸入合法性。
- 數據庫集成:通過SQLAlchemy連接MySQL/PostgreSQL,實現持久化存儲。
- 認證授權:使用JWT或Session實現用戶身份驗證。

八、總結

Flask是快速開發API的理想工具,RESTful風格則讓API更規範、易維護。通過本文的Todo API示例,你已掌握資源設計、HTTP方法應用和數據處理核心技巧。後續可結合數據庫和中間件(如Gunicorn部署),進一步擴展API功能。

開始動手實踐吧!從最簡單的接口到完整項目,逐步提升你的API開發能力~

小夜