一、什么是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开发能力~