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

今天 4阅读

在现代软件开发中,RESTful API 已成为前后端分离架构中的核心组成部分。它允许客户端(如网页、移动端应用)与服务器进行高效的数据交互。本文将介绍如何使用 Python 和 Flask 框架构建一个简单的 RESTful API,并展示完整的代码示例。

什么是 RESTful API?

REST(Representational State Transfer)是一种基于 HTTP 协议的轻量级通信风格。RESTful API 是遵循 REST 原则设计的 Web 接口,通常具有以下特点:

无状态:每个请求都包含所有必要的信息。统一接口:使用标准的 HTTP 方法(GET、POST、PUT、DELETE 等)操作资源。资源导向:API 中的操作是围绕“资源”展开的,例如用户、文章等。

开发环境准备

为了构建我们的 RESTful API,我们需要安装以下工具和库:

Python 3.xFlask(用于构建 Web 应用)Flask-RESTful(简化 REST API 的开发)Flask-SQLAlchemy(用于数据库操作)

你可以通过 pip 安装这些依赖:

pip install flask flask-restful flask-sqlalchemy

项目结构

我们将构建一个管理“书籍”资源的简单 API,支持增删改查操作。项目结构如下:

book_api/│├── app.py               # 主程序文件└── models.py            # 数据模型定义

数据模型定义(models.py)

我们使用 SQLite 作为数据库,并通过 SQLAlchemy ORM 来操作数据。

# models.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class Book(db.Model):    id = db.Column(db.Integer, primary_key=True)    title = db.Column(db.String(100), nullable=False)    author = db.Column(db.String(100), nullable=False)    published_year = db.Column(db.Integer)    def to_dict(self):        return {            'id': self.id,            'title': self.title,            'author': self.author,            'published_year': self.published_year        }

主程序逻辑(app.py)

app.py 中,我们将初始化 Flask 应用、配置数据库、定义资源类并注册路由。

# app.pyfrom flask import Flask, requestfrom flask_restful import Api, Resourcefrom models import db, Bookapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falseapi = Api(app)db.init_app(app)# 初始化数据库@app.before_first_requestdef create_tables():    db.create_all()# 资源类:BookListclass BookListResource(Resource):    def get(self):        books = Book.query.all()        return {'books': [book.to_dict() for book in books]}, 200    def post(self):        data = request.get_json()        new_book = Book(            title=data['title'],            author=data['author'],            published_year=data.get('published_year')        )        db.session.add(new_book)        db.session.commit()        return {'message': 'Book created successfully', 'book': new_book.to_dict()}, 201# 资源类:BookResourceclass BookResource(Resource):    def get(self, book_id):        book = Book.query.get_or_404(book_id)        return {'book': book.to_dict()}, 200    def put(self, book_id):        book = Book.query.get_or_404(book_id)        data = request.get_json()        book.title = data.get('title', book.title)        book.author = data.get('author', book.author)        book.published_year = data.get('published_year', book.published_year)        db.session.commit()        return {'message': 'Book updated successfully', 'book': book.to_dict()}, 200    def delete(self, book_id):        book = Book.query.get_or_404(book_id)        db.session.delete(book)        db.session.commit()        return {'message': 'Book deleted successfully'}, 200# 注册资源api.add_resource(BookListResource, '/books')api.add_resource(BookResource, '/books/<int:book_id>')if __name__ == '__main__':    app.run(debug=True)

运行项目

在终端中运行 app.py

python app.py

Flask 将启动本地服务器,默认监听地址为 http://127.0.0.1:5000/

创建数据库

首次运行时会自动创建 books.db 文件,并生成 books 表。

测试 API 接口

我们可以使用 Postman 或 curl 测试 API 的功能。

1. 添加一本新书(POST)

curl -X POST http://127.0.0.1:5000/books \     -H "Content-Type: application/json" \     -d '{"title": "Python编程入门", "author": "李明", "published_year": 2022}'

2. 获取所有书籍(GET)

curl http://127.0.0.1:5000/books

3. 获取特定书籍(GET)

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

4. 更新书籍信息(PUT)

curl -X PUT http://127.0.0.1:5000/books/1 \     -H "Content-Type: application/json" \     -d '{"title": "Python编程进阶"}'

5. 删除书籍(DELETE)

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

总结与扩展建议

本文演示了如何使用 Python 的 Flask 和 Flask-RESTful 模块构建一个简易的 RESTful API,实现对“书籍”资源的基本 CRUD 操作。虽然这是一个基础示例,但其结构清晰、易于扩展。

后续可扩展方向包括:

身份验证机制:添加 JWT 或 OAuth 认证。分页查询:当数据量大时支持分页获取。文档生成:集成 Swagger 或 ReDoc 提供 API 文档。部署上线:使用 Gunicorn + Nginx 部署到生产环境。错误处理优化:自定义异常返回格式。

如果你希望我继续扩展某一部分内容或提供更复杂的示例,请随时告诉我!

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

目录[+]

您是本站第34970名访客 今日有33篇新文章

微信号复制成功

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