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 方法和资源路径实现清晰、可扩展的接口设计。

相关推荐
二王一个今1 小时前
Python打包成exe(windows)或者app(mac)
开发语言·python·macos
一勺菠萝丶1 小时前
Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
java·python·macos
C嘎嘎嵌入式开发5 小时前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11066 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
white-persist7 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农8 小时前
Centos7 maven 安装
java·python·centos·maven
倔强青铜三8 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
浔川python社9 小时前
《网络爬虫技术规范与应用指南系列》(xc—3):合规实操与场景落地
python
B站计算机毕业设计之家9 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
IT森林里的程序猿9 小时前
基于机器学习方法的网球比赛胜负趋势预测
python·机器学习·django