pip install flask
# 創(chuàng)建
python -m venv venv
# 激活
## Windows
venv\Scripts\activate
## Linux/macOS
source venv/bin/activate
??? 寫完依賴別忘了跑「代碼優(yōu)化」提示詞,一鍵診斷慢查詢與重復請求,讓接口響應提速 30 %!
項目結構:
my_flask_api/
├── app.py
├── requirements.txt
└── venv/
最小可運行示例(app.py):
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Welcome to the Flask REST API!"
if __name__ == '__main__':
app.run(debug=True)
啟動 & 瀏覽器訪問:http://127.0.0.1:5000
books = [
{"id": 1, "title": "Book One", "author": "Author A", "published_date": "2021-01-01"},
{"id": 2, "title": "Book Two", "author": "Author B", "published_date": "2022-02-02"}
]
| 方法 | 端點 | 功能 |
|---|---|---|
| GET | /books |
獲取全部 |
| GET | /books/<int:book_id> |
獲取單本 |
| POST | /books |
新增 |
| PUT | /books/<int:book_id> |
更新 |
| DELETE | /books/<int:book_id> |
刪除 |
代碼片段:
from flask import request, jsonify
# 獲取全部
@app.route('/books', methods=['GET'])
def get_books():
return jsonify(books)
# 獲取單本
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = next((b for b in books if b["id"] == book_id), None)
return jsonify(book) if book else ("Not Found", 404)
# 新增
@app.route('/books', methods=['POST'])
def add_book():
new_book = request.get_json()
new_book["id"] = max(b["id"] for b in books) + 1
books.append(new_book)
return jsonify(new_book), 201
# 更新
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
book = next((b for b in books if b["id"] == book_id), None)
if not book:
return ("Not Found", 404)
data = request.get_json()
book.update(data)
return jsonify(book)
# 刪除
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
global books
books = [b for b in books if b["id"] != book_id]
return ("", 204)
# 獲取全部
curl http://127.0.0.1:5000/books
# 新增
curl -X POST -H "Content-Type: application/json" \
-d '{"title":"Flask Handbook","author":"Your Name","published_date":"2025-06-01"}' \
http://127.0.0.1:5000/books
test_app.py
import unittest
from app import app
class TestAPI(unittest.TestCase):
def setUp(self):
self.app = app.test_client()
self.app.testing = True
def test_get_books(self):
resp = self.app.get('/books')
self.assertEqual(resp.status_code, 200)
def test_add_book(self):
new = {"title": "TDD with Flask", "author": "Tester", "published_date": "2025-01-01"}
resp = self.app.post('/books', json=new)
self.assertEqual(resp.status_code, 201)
if __name__ == '__main__':
unittest.main()
運行測試:
python test_app.py
通過本指南,您已掌握:
?? 上線前最后一步:跑「代碼審查助手」,自動捕捉潛在漏洞、性能隱患與風格問題,給出可執(zhí)行反饋,確保 API 穩(wěn)如磐石!
from flask import abort, request
@app.route('/books')
def get_books_paged():
page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 10))
start = (page-1)*limit
return jsonify(books[start:start+limit])
@app.errorhandler(404)
def resource_not_found(e):
return jsonify(error=str(e)), 404
Q1. 如何部署到生產?
→ 使用 Gunicorn + Nginx:gunicorn -w 4 app:app
Q2. 如何切換為數據庫?
→ 引入 SQLAlchemy + Flask-Migrate,模型替換內存列表即可
Q3. 怎樣生成 API 文檔?
→ 安裝 Flasgger 或 flask-restx,自動根據注釋輸出 Swagger
?? 想給前端同事一份秒懂的接口文檔?「代碼文檔生成器」可自動生成標準化字段描述、請求/響應示例與錯誤碼,讓協(xié)作零阻力!
Flask 的輕量級與可擴展性,讓它成為中小型 REST 服務的理想選擇。跟著本教程,您已擁有:
先用「代碼生成」快速產出 SDK 與錯誤重試邏輯,再用 KPI 面板持續(xù)監(jiān)控接口延遲、測試覆蓋率與線上錯誤率,你的 Flask API 將更快、更穩(wěn)地搶占市場 ??!
原文鏈接: https://blog.bytescrum.com/building-a-rest-api-with-flask-a-step-by-step-guide