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

56分钟前 2阅读

在现代软件开发中,构建 RESTful API 是前后端分离架构中最常见的通信方式之一。Python 以其简洁的语法和强大的生态库(如 Flask 和 FastAPI)成为开发 Web API 的热门语言之一。

本文将介绍如何使用 Python 中的 Flask 框架来构建一个简单的 RESTful API 服务,并实现基本的 CRUD(创建、读取、更新、删除)操作。此外,我们还将集成 SQLite 数据库以持久化存储数据。


环境准备

首先确保你已经安装了 Python 3.x 环境。然后安装 Flask:

pip install Flask

如果你希望使用更现代化的框架,可以考虑使用 FastAPI,但本文将以 Flask 为例进行讲解。


项目结构

我们将构建一个用于管理“书籍”信息的 API 服务,支持以下功能:

获取所有书籍列表(GET)根据 ID 获取特定书籍(GET)添加新书籍(POST)更新书籍信息(PUT)删除书籍(DELETE)

项目的目录结构如下:

book_api/│├── app.py            # 主程序文件├── database.py       # 数据库初始化脚本└── books.db          # SQLite 数据库文件(自动生成)

创建数据库

我们使用轻量级的 SQLite 来存储书籍信息。以下是 database.py 文件内容:

import sqlite3def init_db():    conn = sqlite3.connect('books.db')    cursor = conn.cursor()    cursor.execute('''        CREATE TABLE IF NOT EXISTS books (            id INTEGER PRIMARY KEY AUTOINCREMENT,            title TEXT NOT NULL,            author TEXT NOT NULL,            published_year INTEGER        )    ''')    conn.commit()    conn.close()if __name__ == '__main__':    init_db()

运行这个脚本会创建一个名为 books.db 的数据库文件以及一个 books 表。


编写 API 接口

接下来是核心部分:编写 Flask 应用并定义 RESTful API 接口。以下是 app.py 的完整代码:

from flask import Flask, request, jsonifyimport sqlite3app = Flask(__name__)# 连接数据库def get_db_connection():    conn = sqlite3.connect('books.db')    conn.row_factory = sqlite3.Row  # 允许通过列名访问数据    return conn# 获取所有书籍@app.route('/books', methods=['GET'])def get_books():    conn = get_db_connection()    books = conn.execute('SELECT * FROM books').fetchall()    conn.close()    return jsonify([dict(book) for book in books])# 获取单个书籍@app.route('/books/<int:book_id>', methods=['GET'])def get_book(book_id):    conn = get_db_connection()    book = conn.execute('SELECT * FROM books WHERE id = ?', (book_id,)).fetchone()    conn.close()    if book is None:        return jsonify({'error': 'Book not found'}), 404    return jsonify(dict(book))# 添加书籍@app.route('/books', methods=['POST'])def create_book():    data = request.get_json()    title = data['title']    author = data['author']    published_year = data['published_year']    conn = get_db_connection()    cursor = conn.cursor()    cursor.execute('''        INSERT INTO books (title, author, published_year)        VALUES (?, ?, ?)    ''', (title, author, published_year))    conn.commit()    book_id = cursor.lastrowid    conn.close()    return jsonify({'id': book_id, 'title': title}), 201# 更新书籍@app.route('/books/<int:book_id>', methods=['PUT'])def update_book(book_id):    data = request.get_json()    title = data['title']    author = data['author']    published_year = data['published_year']    conn = get_db_connection()    cursor = conn.cursor()    cursor.execute('''        UPDATE books SET title = ?, author = ?, published_year = ?        WHERE id = ?    ''', (title, author, published_year, book_id))    conn.commit()    conn.close()    return jsonify({'message': 'Book updated successfully'})# 删除书籍@app.route('/books/<int:book_id>', methods=['DELETE'])def delete_book(book_id):    conn = get_db_connection()    cursor = conn.cursor()    cursor.execute('DELETE FROM books WHERE id = ?', (book_id,))    conn.commit()    conn.close()    return jsonify({'message': 'Book deleted successfully'})if __name__ == '__main__':    app.run(debug=True)

测试 API 接口

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

示例请求

添加一本书籍

curl -X POST http://127.0.0.1:5000/books \     -H "Content-Type: application/json" \     -d '{"title": "Python编程从入门到实践", "author": "Eric Matthes", "published_year": 2016}'

获取所有书籍

curl http://127.0.0.1:5000/books

获取某一本书

curl http://127.0.0.1:5000/books/1

更新一本书

curl -X PUT http://127.0.0.1:5000/books/1 \     -H "Content-Type: application/json" \     -d '{"title": "深入浅出Python", "author": "John Doe", "published_year": 2020}'

删除一本书

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

扩展建议

虽然目前的功能已经满足基本需求,但在实际生产环境中还可以做如下改进:

身份验证与授权:为 API 添加 Token 或 JWT 认证。分页查询:当书籍数量较多时,应支持分页返回结果。输入校验:使用如 Marshmallow 等库对输入参数进行校验。错误处理:统一错误响应格式,提高前端调用体验。日志记录与监控:记录请求日志,便于排查问题。使用 ORM 工具:例如 SQLAlchemy 替代原始 SQL,提升可维护性。

总结

本文介绍了如何使用 Python 的 Flask 框架构建一个简单的 RESTful API 服务,并结合 SQLite 实现了完整的 CRUD 功能。通过本例,你可以快速搭建起自己的后端服务,并在此基础上进行扩展和优化。

随着微服务架构的流行,掌握 RESTful API 的设计与实现对于开发者来说是非常重要的技能。希望本文能够帮助你更好地理解和应用这一技术。

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

目录[+]

您是本站第3229名访客 今日有6篇新文章

微信号复制成功

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