API 是大多數依賴資料交換或外部整合的應用程式的支柱。
學習用 Python 建立 API 可以為您的應用程式與其他系統連接並創建多功能後端提供許多機會。
在這裡,我將引導您了解 API 的基礎知識,建立 REST API,並使用 Flask 和 FastAPI(兩個流行的 Python 框架)來建立它們。
在當今的數位世界中,API 無所不在。
它們允許不同的系統和應用程式相互通信,無縫共享資料和功能。
例如,當您使用應用程式查看天氣時,它實際上是呼叫返回天氣資料的 API。
API 透過充當以標準化方式處理請求和傳回資料的中介,讓生活變得更輕鬆。
值得注意的是,API 不僅僅為客戶端應用程式(如網站或行動應用程式)提供服務。
API 可以在同一基礎架構內的後端系統或微服務之間使用,以更有效地管理資料。
REST(表述性狀態傳輸)由於其簡單性和與 HTTP 的兼容性而成為創建 API 的最受歡迎的方法之一。
RESTful API 的結構允許標準 HTTP 方法(如 GET、POST、PUT、DELETE)來操作資源。
它們通常用於管理 CRUD(建立、讀取、更新和刪除)操作,其中每個請求方法對資源資料執行操作。
如果您正在建立 Web 服務,REST 可能是最平易近人且廣受支援的格式。
REST API 也是無狀態的,這意味著每個請求獨立運行,從而允許 REST API 更輕鬆地擴展。
Flask 是我中小型專案的首選,因為它輕量級且易於啟動和運行。
Flask 可以讓您控制 API 的幾乎每個方面,但它還需要在資料驗證和錯誤處理方面做更多的工作。
這種靈活性對於想要更多控制 API 各部分功能的人來說是理想的選擇。
以下是任務管理 API 在 Flask 中的外觀。
首先,請確保使用 pip 安裝 Flask:
pip install flask
此範例顯示如何快速設定用於取得和建立任務以及更新和刪除任務的端點。
from flask import Flask, jsonify, request app = Flask(__name__) tasks = [ {"id": 1, "task": "Learn Flask", "done": False}, {"id": 2, "task": "Build API", "done": False} ] @app.route('/tasks', methods=['GET']) def get_tasks(): return jsonify({"tasks": tasks}) @app.route('/tasks', methods=['POST']) def create_task(): new_task = { "id": len(tasks) + 1, "task": request.json["task"], "done": False } tasks.append(new_task) return jsonify(new_task), 201 @app.route('/tasks/<int:task_id>', methods=['GET']) def get_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['PUT']) def update_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: task.update(request.json) return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['DELETE']) def delete_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: tasks.remove(task) return jsonify({"message": "Task deleted"}) return jsonify({"message": "Task not found"}), 404 if __name__ == '__main__': app.run(debug=True)
此 Python 程式碼使用 Flask 設定 REST API 來管理任務列表,允許客戶端建立、檢索、更新和刪除任務。
任務儲存在一個清單中,其中每個任務都是一個帶有 id、任務和完成狀態的字典。
/tasks 端點支援 GET 請求以返回完整的任務列表,並支援 POST 請求以新增任務,自動為每個任務指派唯一的 ID。
其他端點 /tasks/
如果找不到具有指定 ID 的任務,這些端點將傳回 404 錯誤以及對應的訊息。
API 在偵錯模式下運行,非常適合開發和測試目的。
請注意,對於較大的項目,您可能需要添加更多結構化路由和驗證機制。
FastAPI 是效能敏感的應用程式或需要更多結構和類型安全的專案的絕佳選擇。
FastAPI 預設設計得更快(得益於其非同步功能),並使用 Pydantic 提供開箱即用的強大資料驗證。
我發現 FastAPI 非常直覺且易於使用,特別是對於我需要非同步功能並希望無需第三方套件即可進行內建驗證的項目。
此外,自動文件(透過 Swagger UI)使其變得非常方便。
這是任務管理 API 在 FastAPI 中的外觀。
不要忘記先用 pip 安裝 fastapi 和 uvicorn:
pip install flask
然後您可以建立 API:
from flask import Flask, jsonify, request app = Flask(__name__) tasks = [ {"id": 1, "task": "Learn Flask", "done": False}, {"id": 2, "task": "Build API", "done": False} ] @app.route('/tasks', methods=['GET']) def get_tasks(): return jsonify({"tasks": tasks}) @app.route('/tasks', methods=['POST']) def create_task(): new_task = { "id": len(tasks) + 1, "task": request.json["task"], "done": False } tasks.append(new_task) return jsonify(new_task), 201 @app.route('/tasks/<int:task_id>', methods=['GET']) def get_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['PUT']) def update_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: task.update(request.json) return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['DELETE']) def delete_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: tasks.remove(task) return jsonify({"message": "Task deleted"}) return jsonify({"message": "Task not found"}), 404 if __name__ == '__main__': app.run(debug=True)
此 Python 程式碼使用 FastAPI 建立任務管理 API,利用 Pydantic 模型進行資料驗證和型別強制。
它定義了一個帶有 id、任務和完成狀態的任務模型,並初始化任務清單。
API 包括對任務執行 CRUD 操作的端點:/tasks 端點允許 GET 請求檢索任務列表,並允許 POST 請求新增任務,自動驗證傳入資料。
/tasks/{task_id} 端點允許使用 GET 檢索特定任務、使用 PUT 更新以及使用 DELETE 刪除,如果未找到指定 id 的任務,則傳回 404 錯誤。
FastAPI 的非同步功能和整合文件使該 API 高效且易於測試,非常適合快速開發。
測試至關重要,尤其是在創建其他應用程式將使用的 API 時。
Flask 和 FastAPI 為單元測試提供了出色的支持,可以輕鬆驗證每個端點的行為。
為了讓測試更容易,我建議使用 pytest 進行一般測試結構,因為它與 Flask 和 FastAPI 相容。
特別是對於 FastAPI,TestClient 是一個模擬 HTTP 請求和檢查回應的有用工具。
您需要使用 pip 安裝 httpx:
pip install flask
以下是測試 FastAPI 端點的範例:
from flask import Flask, jsonify, request app = Flask(__name__) tasks = [ {"id": 1, "task": "Learn Flask", "done": False}, {"id": 2, "task": "Build API", "done": False} ] @app.route('/tasks', methods=['GET']) def get_tasks(): return jsonify({"tasks": tasks}) @app.route('/tasks', methods=['POST']) def create_task(): new_task = { "id": len(tasks) + 1, "task": request.json["task"], "done": False } tasks.append(new_task) return jsonify(new_task), 201 @app.route('/tasks/<int:task_id>', methods=['GET']) def get_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['PUT']) def update_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: task.update(request.json) return jsonify(task) return jsonify({"message": "Task not found"}), 404 @app.route('/tasks/<int:task_id>', methods=['DELETE']) def delete_task(task_id): task = next((task for task in tasks if task["id"] == task_id), None) if task: tasks.remove(task) return jsonify({"message": "Task deleted"}) return jsonify({"message": "Task not found"}), 404 if __name__ == '__main__': app.run(debug=True)
使用這兩個框架,測試都很簡單,並且允許您驗證 API 的行為是否符合預期,尤其是隨著它的發展。
我們來看看 Flask 與 FastAPI 的比較
如果您正在開發快速原型或較小的項目,Flask 的簡單性可能就是您所需要的。
對於需要高同時、資料驗證或自動文件的項目,FastAPI 提供了更強大、功能豐富的環境。
Flask 和 FastAPI 都有適合不同類型專案的優點。
如果您是 Python Web 開發新手,從 Flask 開始可以幫助您了解基礎知識,然後再轉向更進階的內容。
另一方面,如果您正在尋找具有內建驗證和文件的現代、高效能 API 開發,FastAPI 是一個理想的選擇。
無論您選擇哪一個,Python 都為 API 開發提供了強大的生態系統。
這兩個框架都允許您創建可以為各種應用程式(從簡單的網站到複雜的微服務)提供支援的 API。
關鍵是要進行實驗,了解每個框架的優勢,並選擇適合您需求的工具。
以上是如何用Python快速建置API的詳細內容。更多資訊請關注PHP中文網其他相關文章!