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开发能力~

小夜