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

昨天 3阅读

在现代软件开发中,RESTful API(Representational State Transfer)已经成为前后端分离架构中最常见的通信方式之一。通过构建 RESTful API,我们可以让前端、移动端或其他服务轻松地与后端进行数据交互。

本文将介绍如何使用 Python 的 Flask 框架来构建一个简单的 RESTful API 服务,并实现基本的 CRUD(创建、读取、更新、删除)操作。我们将从零开始搭建项目结构,编写代码,并展示如何测试 API 接口。


环境准备

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

Python 3.8 或以上版本pip 包管理器Flask 框架(可以通过 pip install flask 安装)Postman 或 curl(用于测试 API)

项目结构设计

为了便于管理和扩展,我们采用如下项目结构:

rest_api/│├── app.py                  # 主程序入口├── models.py               # 数据模型定义├── database.py             # 数据库连接配置└── requirements.txt        # 依赖包列表

数据库配置

我们将使用 SQLite 作为本地开发数据库,它不需要复杂的安装过程,适合快速原型开发。

database.py

import sqlite3def connect_db():    return sqlite3.connect('users.db')def init_db():    with connect_db() as conn:        cur = conn.cursor()        cur.execute('''            CREATE TABLE IF NOT EXISTS users (                id INTEGER PRIMARY KEY AUTOINCREMENT,                name TEXT NOT NULL,                email TEXT NOT NULL UNIQUE            )        ''')        conn.commit()if __name__ == '__main__':    init_db()

运行该脚本将创建一个名为 users.db 的数据库文件以及 users 表。


数据模型定义

虽然我们只用到了一个简单的表,但我们仍然可以封装一些操作函数到模型中。

models.py

from database import connect_dbdef get_all_users():    with connect_db() as conn:        cur = conn.cursor()        cur.execute("SELECT * FROM users")        rows = cur.fetchall()        return [{"id": row[0], "name": row[1], "email": row[2]} for row in rows]def get_user_by_id(user_id):    with connect_db() as conn:        cur = conn.cursor()        cur.execute("SELECT * FROM users WHERE id=?", (user_id,))        row = cur.fetchone()        if row:            return {"id": row[0], "name": row[1], "email": row[2]}        return Nonedef create_user(name, email):    with connect_db() as conn:        cur = conn.cursor()        try:            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))            conn.commit()            return {"message": "User created", "id": cur.lastrowid}        except sqlite3.IntegrityError:            return {"error": "Email already exists"}def update_user(user_id, name, email):    with connect_db() as conn:        cur = conn.cursor()        cur.execute("UPDATE users SET name=?, email=? WHERE id=?", (name, email, user_id))        conn.commit()        if cur.rowcount == 0:            return {"error": "User not found"}        return {"message": "User updated"}def delete_user(user_id):    with connect_db() as conn:        cur = conn.cursor()        cur.execute("DELETE FROM users WHERE id=?", (user_id,))        conn.commit()        if cur.rowcount == 0:            return {"error": "User not found"}        return {"message": "User deleted"}

Flask 主程序与路由设置

接下来,我们将使用 Flask 来创建 Web 应用并绑定 API 路由。

app.py

from flask import Flask, request, jsonifyfrom models import *app = Flask(__name__)@app.route('/users', methods=['GET'])def list_users():    users = get_all_users()    return jsonify(users)@app.route('/users/<int:user_id>', methods=['GET'])def get_user(user_id):    user = get_user_by_id(user_id)    if user:        return jsonify(user)    return jsonify({"error": "User not found"}), 404@app.route('/users', methods=['POST'])def add_user():    data = request.get_json()    name = data.get('name')    email = data.get('email')    if not name or not email:        return jsonify({"error": "Missing name or email"}), 400    result = create_user(name, email)    if 'error' in result:        return jsonify(result), 400    return jsonify(result), 201@app.route('/users/<int:user_id>', methods=['PUT'])def edit_user(user_id):    data = request.get_json()    name = data.get('name')    email = data.get('email')    if not name or not email:        return jsonify({"error": "Missing name or email"}), 400    result = update_user(user_id, name, email)    if 'error' in result:        return jsonify(result), 400    return jsonify(result)@app.route('/users/<int:user_id>', methods=['DELETE'])def remove_user(user_id):    result = delete_user(user_id)    if 'error' in result:        return jsonify(result), 400    return jsonify(result)if __name__ == '__main__':    app.run(debug=True)

API 测试

启动服务:

python app.py

服务默认运行在 http://127.0.0.1:5000/

你可以使用 Postman 或命令行工具如 curl 进行测试。

示例请求:

创建用户(POST)

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

获取所有用户(GET)

curl http://localhost:5000/users

获取单个用户(GET)

curl http://localhost:5000/users/1

更新用户(PUT)

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

删除用户(DELETE)

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

总结

通过本文,我们学习了如何使用 Python 和 Flask 构建一个完整的 RESTful API 服务。我们实现了基本的 CRUD 操作,并使用 SQLite 作为后端数据库。整个项目结构清晰、易于扩展,适合作为小型项目或教学示例。

当然,在生产环境中,还需要考虑诸如身份验证、错误处理、日志记录、数据库迁移、性能优化等问题。但本文提供了一个良好的起点。


附录:依赖列表

requirements.txt

Flask==2.3.3

可以通过以下命令安装依赖:

pip install -r requirements.txt

如果你对这个项目感兴趣,还可以尝试集成 Swagger UI 来自动生成 API 文档,或者使用 SQLAlchemy 替代原生 SQL 实现更高级的对象关系映射(ORM)。这些都可以作为下一步的学习方向。

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

目录[+]

您是本站第3389名访客 今日有8篇新文章

微信号复制成功

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