当前位置: 首页 > news >正文

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,用于管理图书列表。

代码实现
from flask import Flask, jsonify, requestapp = 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 booksbooks = [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,然后在终端中运行:

    python app.py
    

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

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

    • 获取所有图书:

      curl http://127.0.0.1:5000/books
      
    • 返回结果

{"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"}]
}
  • 获取单本图书:
    curl http://127.0.0.1:5000/books/1
    
    • 返回结果
{"author": "\u5f20\u4e09","id": 1,"title": "Python\u7f16\u7a0b"
}
  • 添加新图书:

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

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

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

{"author": "\u5f20\u4e09","id": 1,"title": "\u6df1\u5ea6\u5b66\u4e60"
}
  • 删除图书:
    curl -X DELETE http://127.0.0.1:5000/books/1
    
  • 返回结果
{"message": "Book deleted"
}

总结

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

http://www.lryc.cn/news/538707.html

相关文章:

  • Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
  • OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression
  • 百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
  • 批处理效率提升技巧
  • Kubernetes知识点总结(十)
  • 安全防御综合练习2 nat+智能选路
  • Flutter 中的数据跨层传递方案
  • 代码随想录D50-51 图论 Python
  • MyBatis进阶
  • 容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案
  • DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
  • LeetCode-633. 平方数之和
  • 前端面试技巧与实践
  • windows Redis Insight 如何查看宝塔docker里的redis数据
  • sql数据执行失败,三个命令依次执行
  • BGP配置华为——RR反射器配置
  • 基于Flask的艺恩影片票房分析系统的设计与实现
  • 架构设计系列(三):架构模式
  • 零基础学QT、C++(一)安装QT
  • SQL注入(SQL Injection)详解与实战
  • 【Prometheus】prometheus结合domain_exporter实现域名监控
  • Java 设计模式之命令模式
  • BT401双模音频蓝牙模块如何开启ble的透传,有什么注意事项
  • 利用二分法+布尔盲注、时间盲注进行sql注入
  • Vue 项目登录的基本流程
  • kubernetes源码分析 kubelet
  • Web3 开发者周刊 36 | 构建自主未来:Agent、可扩展性与赏金
  • 零基础入门机器学习 -- 第十一章机器学习模型的评估与优化
  • 菜鸟之路Day15一一IO流(一)
  • 动手学Agent——Day2