使用 Python 构建一个简易的 RESTful API 服务器

07-02 13阅读

在现代软件开发中,RESTful API(Representational State Transfer)已经成为前后端分离架构中最常用的通信方式之一。它基于 HTTP 协议,使用统一的接口来实现客户端与服务器之间的数据交互。本文将介绍如何使用 Python 和 Flask 框架构建一个简易但功能完整的 RESTful API 服务器,并展示其基本的操作:增删改查(CRUD)。同时,我们也会提供完整的代码示例,帮助读者理解并实践。

项目准备

1.1 环境要求

Python 3.x安装 Flask 库:
pip install Flask

1.2 项目结构

为了便于管理和扩展,我们将采用以下简单的目录结构:

rest_api/│├── app.py              # 主程序文件└── data.json           # 模拟数据库文件

设计 API 接口

我们的目标是构建一个用于管理用户信息的 API 服务。以下是将要实现的接口列表:

方法URL功能描述
GET/users获取所有用户
GET/users/根据 ID 获取用户
POST/users创建新用户
PUT/users/更新指定用户
DELETE/users/删除指定用户

代码实现

3.1 初始化 Flask 应用

首先,我们在 app.py 中初始化 Flask 应用,并加载或创建一个 JSON 文件作为模拟数据库。

from flask import Flask, request, jsonify, abortimport jsonimport osapp = Flask(__name__)DATA_FILE = 'data.json'# 如果数据文件不存在,则创建默认数据if not os.path.exists(DATA_FILE):    with open(DATA_FILE, 'w') as f:        json.dump([], f)def read_data():    with open(DATA_FILE, 'r') as f:        return json.load(f)def write_data(data):    with open(DATA_FILE, 'w') as f:        json.dump(data, f, indent=4)

3.2 实现 CRUD 操作

获取所有用户(GET /users)

@app.route('/users', methods=['GET'])def get_users():    users = read_data()    return jsonify(users)

获取单个用户(GET /users/

@app.route('/users/<int:user_id>', methods=['GET'])def get_user(user_id):    users = read_data()    user = next((u for u in users if u['id'] == user_id), None)    if user is None:        abort(404)  # 返回 404 Not Found    return jsonify(user)

创建用户(POST /users)

@app.route('/users', methods=['POST'])def create_user():    users = read_data()    new_user = request.get_json()    # 简单验证    if not new_user or 'name' not in new_user or 'email' not in new_user:        abort(400)  # Bad Request    # 自动生成 ID    new_user['id'] = max([u['id'] for u in users], default=0) + 1    users.append(new_user)    write_data(users)    return jsonify(new_user), 201  # Created

更新用户(PUT /users/

@app.route('/users/<int:user_id>', methods=['PUT'])def update_user(user_id):    users = read_data()    user_index = next((i for i, u in enumerate(users) if u['id'] == user_id), None)    if user_index is None:        abort(404)    updated_data = request.get_json()    users[user_index].update(updated_data)    write_data(users)    return jsonify(users[user_index])

删除用户(DELETE /users/

@app.route('/users/<int:user_id>', methods=['DELETE'])def delete_user(user_id):    users = read_data()    user = next((u for u in users if u['id'] == user_id), None)    if user is None:        abort(404)    users.remove(user)    write_data(users)    return jsonify({'result': True})

3.3 错误处理

Flask 提供了全局错误处理器机制,我们可以添加一个统一的错误响应格式。

@app.errorhandler(400)def bad_request(error):    return jsonify({'error': 'Bad request'}), 400@app.errorhandler(404)def not_found(error):    return jsonify({'error': 'Not found'}), 404

3.4 启动应用

最后,在 app.py 的末尾加上启动代码:

if __name__ == '__main__':    app.run(debug=True)

测试 API

你可以使用 Postman 或者命令行工具如 curl 来测试这些接口。

例如,创建一个用户:

curl -X POST http://localhost:5000/users \     -H "Content-Type: application/json" \     -d '{"name": "Alice", "email": "alice@example.com"}'

获取所有用户:

curl http://localhost:5000/users

更新用户:

curl -X PUT http://localhost:5000/users/1 \     -H "Content-Type: application/json" \     -d '{"name": "Alice Smith"}'

删除用户:

curl -X DELETE http://localhost:5000/users/1

小结

通过本文的介绍和代码示例,你已经掌握了一个基本的 RESTful API 的构建方法。虽然我们使用的是内存中的 JSON 数据库,但这足以说明 REST API 的基本工作原理。在实际生产环境中,通常会结合数据库系统(如 SQLite、MySQL、MongoDB 等)进行持久化存储,并引入更复杂的认证、权限控制、日志记录等功能。

如果你希望进一步扩展这个项目,可以考虑以下几个方向:

引入 SQLAlchemy 或 Peewee 连接真实数据库;添加 JWT 身份验证;使用 Flask-RESTful 插件简化路由;部署到云平台(如 Heroku、AWS、阿里云等);编写自动化测试。

附录:完整代码

from flask import Flask, request, jsonify, abortimport jsonimport osapp = Flask(__name__)DATA_FILE = 'data.json'# 如果数据文件不存在,则创建默认数据if not os.path.exists(DATA_FILE):    with open(DATA_FILE, 'w') as f:        json.dump([], f)def read_data():    with open(DATA_FILE, 'r') as f:        return json.load(f)def write_data(data):    with open(DATA_FILE, 'w') as f:        json.dump(data, f, indent=4)@app.route('/users', methods=['GET'])def get_users():    users = read_data()    return jsonify(users)@app.route('/users/<int:user_id>', methods=['GET'])def get_user(user_id):    users = read_data()    user = next((u for u in users if u['id'] == user_id), None)    if user is None:        abort(404)    return jsonify(user)@app.route('/users', methods=['POST'])def create_user():    users = read_data()    new_user = request.get_json()    if not new_user or 'name' not in new_user or 'email' not in new_user:        abort(400)    new_user['id'] = max([u['id'] for u in users], default=0) + 1    users.append(new_user)    write_data(users)    return jsonify(new_user), 201@app.route('/users/<int:user_id>', methods=['PUT'])def update_user(user_id):    users = read_data()    user_index = next((i for i, u in enumerate(users) if u['id'] == user_id), None)    if user_index is None:        abort(404)    updated_data = request.get_json()    users[user_index].update(updated_data)    write_data(users)    return jsonify(users[user_index])@app.route('/users/<int:user_id>', methods=['DELETE'])def delete_user(user_id):    users = read_data()    user = next((u for u in users if u['id'] == user_id), None)    if user is None:        abort(404)    users.remove(user)    write_data(users)    return jsonify({'result': True})@app.errorhandler(400)def bad_request(error):    return jsonify({'error': 'Bad request'}), 400@app.errorhandler(404)def not_found(error):    return jsonify({'error': 'Not found'}), 404if __name__ == '__main__':    app.run(debug=True)

如需继续深入学习,请查阅官方文档:

Flask 官方文档HTTP 状态码参考
免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第3名访客 今日有21篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!