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

今天 4阅读

在现代的软件开发中,构建 RESTful API 是前后端分离架构中非常常见的一种方式。Python 凭借其简洁、易读的语法和丰富的库支持(如 Flask、FastAPI 等),成为了开发 Web API 的热门语言之一。

本文将介绍如何使用 Python 和 Flask 框架来构建一个简单的 RESTful API,并实现对“用户信息”的增删改查操作。同时,我们还将使用 SQLite 数据库来持久化数据,并展示完整的代码示例。


环境准备

在开始之前,请确保你已经安装了以下工具:

Python 3.8 或以上版本pip 包管理器SQLite 浏览器(可选,用于查看数据库内容)

然后安装所需的 Python 库:

pip install flask flask-sqlalchemy

项目结构

我们的项目目录结构如下:

rest-api/│├── app.py              # 主程序文件├── database.py         # 数据库配置与模型定义└── requirements.txt    # 依赖包列表

创建数据库模型

我们先来定义一个 User 模型,用于存储用户的基本信息:姓名、邮箱和年龄。

文件:database.py

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)class User(db.Model):    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(100), nullable=False)    email = db.Column(db.String(120), unique=True, nullable=False)    age = db.Column(db.Integer)    def to_dict(self):        return {            "id": self.id,            "name": self.name,            "email": self.email,            "age": self.age        }# 创建数据库表with app.app_context():    db.create_all()

这里我们使用了 Flask-SQLAlchemy 来简化数据库操作,并为 User 模型添加了一个 to_dict() 方法,方便将对象转换为 JSON 格式返回给客户端。


编写 RESTful API 接口

接下来我们将使用 Flask 编写四个基本接口:

GET /users: 获取所有用户GET /users/<id>: 获取指定 ID 的用户POST /users: 添加新用户PUT /users/<id>: 更新指定用户DELETE /users/<id>: 删除指定用户

文件:app.py

from flask import Flask, request, jsonifyfrom database import app, db, User@app.route('/users', methods=['GET'])def get_users():    users = User.query.all()    return jsonify([user.to_dict() for user in users])@app.route('/users/<int:user_id>', methods=['GET'])def get_user(user_id):    user = User.query.get_or_404(user_id)    return jsonify(user.to_dict())@app.route('/users', methods=['POST'])def create_user():    data = request.get_json()    if User.query.filter_by(email=data['email']).first():        return jsonify({"error": "Email already exists"}), 400    new_user = User(        name=data['name'],        email=data['email'],        age=data.get('age')    )    db.session.add(new_user)    db.session.commit()    return jsonify(new_user.to_dict()), 201@app.route('/users/<int:user_id>', methods=['PUT'])def update_user(user_id):    user = User.query.get_or_404(user_id)    data = request.get_json()    if 'name' in data:        user.name = data['name']    if 'email' in data:        if User.query.filter(User.id != user_id).filter_by(email=data['email']).first():            return jsonify({"error": "Email already taken"}), 400        user.email = data['email']    if 'age' in data:        user.age = data['age']    db.session.commit()    return jsonify(user.to_dict())@app.route('/users/<int:user_id>', methods=['DELETE'])def delete_user(user_id):    user = User.query.get_or_404(user_id)    db.session.delete(user)    db.session.commit()    return jsonify({"message": "User deleted successfully"})if __name__ == '__main__':    app.run(debug=True)

运行应用并测试接口

启动服务:

python app.py

默认情况下,Flask 会在 http://127.0.0.1:5000 上运行服务。

你可以使用 Postman 或 curl 命令来测试各个接口的功能。

示例请求:

1. 添加用户(POST)

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

2. 获取所有用户(GET)

curl http://127.0.0.1:5000/users

3. 获取某个用户(GET)

curl http://127.0.0.1:5000/users/1

4. 更新用户(PUT)

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

5. 删除用户(DELETE)

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

扩展建议

虽然我们已经实现了基本功能,但还可以进一步优化或扩展:

分页支持:当用户数量较多时,可以引入分页机制。身份验证:使用 JWT 或 OAuth 对用户进行认证。日志记录:记录访问日志和错误信息。单元测试:为每个接口编写测试用例。使用更高效的框架:如 FastAPI,提供自动文档生成和异步支持。

总结

通过本文,我们使用 Python 的 Flask 框架和 SQLite 数据库构建了一个基础的 RESTful API 服务。整个过程涵盖了从数据库建模到接口实现的完整流程,适合初学者入门学习。

RESTful API 是现代 Web 开发的核心组成部分,掌握其开发方法对于后端开发者来说至关重要。希望本文能为你打开通向实际项目开发的大门。


附录:requirements.txt

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

目录[+]

您是本站第5062名访客 今日有12篇新文章

微信号复制成功

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