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

昨天 3阅读

在现代的 Web 开发中,RESTful API 已经成为前后端分离架构的核心部分。通过 RESTful API,前端可以方便地与后端进行数据交互,而无需关心具体的实现细节。本文将介绍如何使用 Python 和 Flask 框架构建一个简单的 RESTful API,并提供完整的代码示例。

什么是 RESTful API?

REST(Representational State Transfer)是一种软件架构风格,它基于 HTTP 协议,定义了客户端和服务器之间交互的一组约束。RESTful API 是遵循 REST 原则设计的 API 接口。

RESTful API 的几个关键特性包括:

无状态:每个请求都包含所有必要的信息。统一接口:使用标准的 HTTP 方法(GET、POST、PUT、DELETE 等)操作资源。资源导向:API 中的操作是围绕“资源”进行的,资源通常对应数据库中的表或对象。

开发环境准备

为了构建这个项目,我们需要以下工具:

Python 3.xFlask 框架Postman(用于测试 API)SQLite(轻量级数据库)

安装 Flask:

pip install Flask

我们也可以安装 flask-sqlalchemy 来简化数据库操作:

pip install flask-sqlalchemy

项目结构

我们将创建一个管理“书籍”资源的简单 API,支持以下功能:

获取所有书籍(GET /books)根据 ID 获取某本书籍(GET /books/)添加新书籍(POST /books)更新书籍信息(PUT /books/)删除书籍(DELETE /books/

编写代码

1. 初始化 Flask 应用和数据库模型

我们使用 SQLite 数据库来存储书籍信息,使用 SQLAlchemy ORM 进行操作。

# app.pyfrom flask import Flask, request, jsonifyfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)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_date = db.Column(db.String(20))    def __repr__(self):        return f'<Book {self.id}>'@app.before_first_requestdef create_tables():    db.create_all()

2. 实现 GET 请求获取书籍列表

@app.route('/books', methods=['GET'])def get_books():    books = Book.query.all()    output = []    for book in books:        book_data = {'id': book.id, 'title': book.title, 'author': book.author, 'published_date': book.published_date}        output.append(book_data)    return jsonify({'books': output})

3. 实现根据 ID 获取单个书籍

@app.route('/books/<int:id>', methods=['GET'])def get_book(id):    book = Book.query.get_or_404(id)    return jsonify({        'id': book.id,        'title': book.title,        'author': book.author,        'published_date': book.published_date    })

4. 实现添加书籍(POST 请求)

@app.route('/books', methods=['POST'])def add_book():    data = request.get_json()    new_book = Book(        title=data['title'],        author=data['author'],        published_date=data.get('published_date')    )    db.session.add(new_book)    db.session.commit()    return jsonify({'message': 'Book added!', 'id': new_book.id}), 201

5. 实现更新书籍信息(PUT 请求)

@app.route('/books/<int:id>', methods=['PUT'])def update_book(id):    book = Book.query.get_or_404(id)    data = request.get_json()    book.title = data.get('title', book.title)    book.author = data.get('author', book.author)    book.published_date = data.get('published_date', book.published_date)    db.session.commit()    return jsonify({'message': 'Book updated!'})

6. 实现删除书籍(DELETE 请求)

@app.route('/books/<int:id>', methods=['DELETE'])def delete_book(id):    book = Book.query.get_or_404(id)    db.session.delete(book)    db.session.commit()    return jsonify({'message': 'Book deleted!'})

7. 启动 Flask 应用

最后,在文件底部加上启动应用的代码:

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

测试 API

你可以使用 Postmancurl 来测试这些接口。

例如,使用 curl 添加一本书:

curl -X POST http://localhost:5000/books \-H "Content-Type: application/json" \-d '{"title": "Flask Web Development", "author": "Miguel Grinberg", "published_date": "2020-01-01"}'

获取所有书籍:

curl http://localhost:5000/books

总结

本文介绍了如何使用 Flask 构建一个简单的 RESTful API,并实现了对“书籍”资源的基本 CRUD 操作。虽然这是一个基础的示例,但它展示了 RESTful API 的基本结构和开发流程。实际生产环境中,还需要考虑身份验证、错误处理、分页、日志记录等更多高级功能。

如果你希望扩展这个项目,可以尝试:

使用 JWT 实现用户认证;添加分页支持;使用 Swagger 自动生成 API 文档;将数据库换成 MySQL 或 PostgreSQL;部署到云服务(如 Heroku、AWS、阿里云等)。

参考资料

Flask 官方文档Flask-SQLAlchemy 文档RESTful API 设计指南

如需完整项目源码,请将上述代码保存为 app.py 并运行:

python app.py

访问 http://localhost:5000/books 即可开始测试你的第一个 RESTful API!

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

目录[+]

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

微信号复制成功

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