Python实战进阶 No1: RESTful API - 基于Flask的实例说明

Python实战进阶 No1: RESTful API - 基于Flask的实例说明

RESTful API 是一种基于 REST(Representational State Transfer) 架构风格的 Web 服务接口设计规范。它使用 HTTP 协议的标准方法(如 GET、POST、PUT、DELETE 等)来操作资源,通常以 JSON 或 XML 格式返回数据。以下是 RESTful API 的几个关键特性:

  1. 无状态性:每个请求必须包含所有必要的信息,服务器不会保存客户端的状态。
  2. 统一接口:通过标准的 HTTP 方法操作资源(URL 表示资源)。
  3. 分层系统:可以有多个中间层(如负载均衡器、缓存等),但客户端无需知道这些细节。
  4. 支持多种格式:通常使用 JSON 或 XML 格式传输数据。

如何使用 RESTful API 构建 Web 应用程序

构建一个基于 RESTful API 的 Web 应用程序通常包括以下几个步骤:

  1. 定义资源和 URL 路径。
  2. 使用 HTTP 方法(GET、POST、PUT、DELETE)操作资源。
  3. 返回适当的数据格式(如 JSON)。
  4. 在客户端通过 HTTP 请求与服务器交互。

Python 实例:使用 Flask 构建 RESTful API

以下是一个简单的 Python 程序,使用 Flask 框架创建一个 RESTful API,用于管理图书列表。

代码实现
python 复制代码
from flask import Flask, jsonify, request

app = Flask(__name__)

# 模拟的图书数据库
books = [
    {"id": 1, "title": "Python编程", "author": "张三"},
    {"id": 2, "title": "Flask入门", "author": "李四"},
    {"id": 3, "title": "机器学习基础", "author": "王五"}
]

# 获取所有图书 (GET)
@app.route('/books', methods=['GET'])
def get_books():
    return jsonify({"books": books})

# 根据 ID 获取单本图书 (GET)
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = next((b for b in books if b["id"] == book_id), None)
    if book:
        return jsonify(book)
    else:
        return jsonify({"error": "Book not found"}), 404

# 添加新图书 (POST)
@app.route('/books', methods=['POST'])
def add_book():
    new_book = request.get_json()
    books.append(new_book)
    return jsonify(new_book), 201

# 更新图书信息 (PUT)
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    updated_data = request.get_json()
    book = next((b for b in books if b["id"] == book_id), None)
    if book:
        book.update(updated_data)
        return jsonify(book)
    else:
        return jsonify({"error": "Book not found"}), 404

# 删除图书 (DELETE)
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    global books
    books = [b for b in books if b["id"] != book_id]
    return jsonify({"message": "Book deleted"})

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

运行和测试

  1. 运行程序

    将上述代码保存为 app.py,然后在终端中运行:

    bash 复制代码
    python app.py

    默认情况下,Flask 应用会在 http://127.0.0.1:5000/ 启动。

  2. 测试 API(在 cmd 窗口中运行 或 通过 Html 调用)

    • 获取所有图书:

      bash 复制代码
      curl http://127.0.0.1:5000/books
    • 返回结果

bash 复制代码
{
 "books": [
   {
     "author": "\u5f20\u4e09",
     "id": 1,
     "title": "Python\u7f16\u7a0b"
   },
   {
     "author": "\u674e\u56db",
     "id": 2,
     "title": "Flask\u5165\u95e8"
   },
   {
     "author": "\u738b\u4e94",
     "id": 3,
     "title": "\u673a\u5668\u5b66\u4e60\u57fa\u7840"
   }
 ]
}
  • 获取单本图书:

    bash 复制代码
    curl http://127.0.0.1:5000/books/1
    • 返回结果
bash 复制代码
{
  "author": "\u5f20\u4e09",
  "id": 1,
  "title": "Python\u7f16\u7a0b"
}
  • 添加新图书:

    bash 复制代码
      curl -X POST -H "Content-Type: application/json" -d "{\"id\": 4, \"title\": \"人工智能\", \"author\": \"赵六\"}" http://127.0.0.1:5000/books 
  • 返回结果

bash 复制代码
{
  "author": "\u8d75\u516d",
  "id": 4,
  "title": "\u4eba\u5de5\u667a\u80fd"
}
  • 更新图书信息:

    bash 复制代码
    curl -X PUT -H "Content-Type: application/json" -d "{\"title\": \"深度学习\"}' http://127.0.0.1:5000/books/1
  • 返回结果

bash 复制代码
{
  "author": "\u5f20\u4e09",
  "id": 1,
  "title": "\u6df1\u5ea6\u5b66\u4e60"
}
  • 删除图书:

    bash 复制代码
    curl -X DELETE http://127.0.0.1:5000/books/1
  • 返回结果

bash 复制代码
{
  "message": "Book deleted"
}

总结

通过这个例子,我们展示了如何使用 Flask 创建一个简单的 RESTful API 来管理图书数据。你可以根据实际需求扩展功能,例如连接数据库、添加用户认证等。RESTful API 的核心思想是通过 HTTP 方法和资源路径实现清晰、可扩展的接口设计。

相关推荐
子午43 分钟前
【民族服饰识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·python·深度学习
QxQ么么6 小时前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
执笔论英雄6 小时前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
小徐敲java8 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
猫头虎8 小时前
如何解决 pip install 编译报错 fatal error: hdf5.h: No such file or directory(h5py)问题
人工智能·python·pycharm·开源·beautifulsoup·ai编程·pip
p***23368 小时前
python的sql解析库-sqlparse
数据库·python·sql
陈奕昆8 小时前
n8n实战营Day1课时3:高频节点解析+Webhook表单同步Excel实操
人工智能·python·n8n
深蓝电商API8 小时前
动态 Token、加密参数逆向全流程:从原理到实战破解
爬虫·python
qq_17082750 CNC注塑机数采8 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
java1234_小锋8 小时前
基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 切割车牌矩阵获取车牌字符
python·深度学习·cnn·车牌识别