12步构建Flask REST API教程 [2026版](2026-07-27)
你是不是也曾看着一堆API文档感到头皮发麻?别担心,Flask 作为Python最轻量级的Web框架,一直以“简单到飞起”著称。2026年,Flask生态更加成熟,构建REST API几乎就像搭积木。今天,我们用12个步骤,从零开始构建一个完整的REST API。
本教程将带你完成一个图书管理系统API,支持CRUD操作(创建、读取、更新、删除),并包含认证、错误处理和部署准备。全部代码可在GitHub上获取(链接见文末)。
第一步:环境准备与项目初始化
安装Flask及相关库
pip install flask flask-sqlalchemy flask-marshmallow flask-cors
flask-sqlalchemy:数据库ORMflask-marshmallow:序列化/反序列化flask-cors:跨域支持
第二步:创建Flask应用骨架
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_cors import CORS
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.db'
db = SQLAlchemy(app)
ma = Marshmallow(app)
CORS(app)
实用建议:开发阶段用SQLite,生产环境换成PostgreSQL或MySQL。
第三步:定义数据模型(Model)
一个“书”模型,包含ID、书名、作者、出版年份、ISBN:
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
author = db.Column(db.String(200), nullable=False)
year = db.Column(db.Integer)
isbn = db.Column(db.String(13), unique=True)
def __repr__(self):
return f'<Book {self.title}>'
第四步:创建数据库与初始数据
with app.app_context():
db.create_all()
# 插入示例数据
if not Book.query.first():
sample_book = Book(title="Flask实战", author="李华", year=2026, isbn="9781234567890")
db.session.add(sample_book)
db.session.commit()
print("✅ 示例数据已插入")
案例数据:目前数据库中有1本书,后续可通过API添加更多。
第五步:定义序列化器(Schema)
from marshmallow import fields, validate
class BookSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Book
load_instance = True
isbn = fields.String(validate=validate.Length(min=13, max=13))
book_schema = BookSchema()
books_schema = BookSchema(many=True)
第六步:构建GET端点——获取所有图书
@app.route('/api/books', methods=['GET'])
def get_books():
all_books = Book.query.all()
return books_schema.jsonify(all_books), 200
调用方式:GET http://localhost:5000/api/books
返回示例:
[
{
"id": 1,
"title": "Flask实战",
"author": "李华",
"year": 2026,
"isbn": "9781234567890"
}
]
第七步:构建GET端点——获取单本书
@app.route('/api/books/<int:id>', methods=['GET'])
def get_book(id):
book = Book.query.get_or_404(id)
return book_schema.jsonify(book), 200
第八步:构建POST端点——创建新书
@app.route('/api/books', methods=['POST'])
def create_book():
json_data = request.get_json()
if not json_data:
return {"message": "No input data provided"}, 400
book = book_schema.load(json_data, session=db.session)
db.session.add(book)
db.session.commit()
return book_schema.jsonify(book), 201
隐蔽陷阱:记得做输入验证!例如ISBN必须13位。
第九步:构建PUT端点——更新图书
@app.route('/api/books/<int:id>', methods=['PUT'])
def update_book(id):
book = Book.query.get_or_404(id)
json_data = request.get_json()
book = book_schema.load(json_data, instance=book, session=db.session)
db.session.commit()
return book_schema.jsonify(book), 200
第十步:构建DELETE端点——删除图书
@app.route('/api/books/<int:id>', methods=['DELETE'])
def delete_book(id):
book = Book.query.get_or_404(id)
db.session.delete(book)
db.session.commit()
return {"message": "Book deleted"}, 200
第十一步:添加认证与错误处理
简单Token认证(Mock)
@app.before_request
def require_auth():
if request.endpoint and request.method in ['POST', 'PUT', 'DELETE']:
token = request.headers.get('Authorization')
if token != 'Bearer secret-token-2026':
return {"message": "Unauthorized"}, 401
全局错误处理
@app.errorhandler(404)
def not_found(error):
return {"message": "Resource not found"}, 404
@app.errorhandler(500)
def internal_error(error):
return {"message": "Internal server error"}, 500
第十二步:运行与测试
启动服务
python app.py
使用curl测试
# 获取所有书
curl http://localhost:5000/api/books
# 创建新书(需要认证)
curl -X POST http://localhost:5000/api/books \
-H "Content-Type: application/json" \
-H "Authorization: Bearer secret-token-2026" \
-d '{"title":"Docker入门","author":"王伟","year":2025,"isbn":"9780987654321"}'
实用建议:用Postman或Insomnia进行可视化测试,比curl更高效。
行动号召
现在轮到你动手了!复制以上代码并运行,你会惊讶于Flask的简洁与强大。如果遇到问题,请分享你的错误日志到评论区,大家一起解决。
🌟 小挑战:尝试添加一个
GET /api/books/search?q=Flask端点,实现模糊搜索功能。
本教程完整代码
GitHub仓库:Flask-REST-API-Tutorial-2026(请替换为你的仓库链接)
免责声明:本文是一篇技术教程,提供的信息仅用于教育目的。文中代码示例可能在特定环境中需要调整。作者不对因使用本文内容而产生的任何直接或间接损失承担责任。请在实际项目中遵循安全最佳实践,例如使用HTTPS、真正的认证机制(如JWT)和环境变量管理密钥。