首页 > 编程语言 >使用 Python 构建一个简单的 REST API

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

时间:2024-07-26 09:08:55浏览次数:11  
标签:return Python app REST id API books book

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

简介

本文档将引导您使用 Python 和 Flask 框架构建一个简单的 REST API。我们将创建一个 API,用于管理一个虚拟的书籍数据库。

准备工作

  • Python 环境: 确保您的系统上安装了 Python 3.x。
  • Flask 框架: 使用 pip 安装 Flask:
pip install Flask

项目结构

project/
├── app.py
└── data/
    └── books.json

1. 创建应用程序文件 (app.py)

from flask import Flask, jsonify, request

app = Flask(__name__)

# 加载书籍数据
def load_books():
    with open("data/books.json", "r") as f:
        return json.load(f)

# 初始化书籍数据
books = load_books()

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

# 获取特定书籍
@app.route("/books/<int:book_id>", methods=["GET"])
def get_book(book_id):
    for book in books:
        if book["id"] == book_id:
            return jsonify(book)
    return jsonify({"error": "Book not found"}), 404

# 创建新书籍
@app.route("/books", methods=["POST"])
def create_book():
    new_book = request.get_json()
    books.append(new_book)
    return jsonify({"message": "Book created successfully"}), 201

# 更新书籍
@app.route("/books/<int:book_id>", methods=["PUT"])
def update_book(book_id):
    for i, book in enumerate(books):
        if book["id"] == book_id:
            books[i] = request.get_json()
            return jsonify({"message": "Book updated successfully"}), 200
    return jsonify({"error": "Book not found"}), 404

# 删除书籍
@app.route("/books/<int:book_id>", methods=["DELETE"])
def delete_book(book_id):
    for i, book in enumerate(books):
        if book["id"] == book_id:
            del books[i]
            return jsonify({"message": "Book deleted successfully"}), 204
    return jsonify({"error": "Book not found"}), 404

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

2. 创建书籍数据文件 (data/books.json)

[
  {
    "id": 1,
    "title": "The Hitchhiker's Guide to the Galaxy",
    "author": "Douglas Adams",
    "genre": "Science Fiction"
  },
  {
    "id": 2,
    "title": "1984",
    "author": "George Orwell",
    "genre": "Dystopian"
  }
]

运行 API

在终端中运行以下命令:

python app.py

现在,您的 API 应该在 http://127.0.0.1:5000/ 上运行。

测试 API

您可以使用工具如 Postman 或 curl 来测试 API 端点。

例如,使用 curl 获取所有书籍:

curl http://127.0.0.1:5000/books

总结

本文档演示了如何使用 Python 和 Flask 构建一个简单的 REST API。您可以根据需要扩展此 API,添加更多端点和功能。

标签:return,Python,app,REST,id,API,books,book
From: https://www.cnblogs.com/xiaoni/p/18324566

相关文章

  • python学习之闭包与装饰器
    一、闭包闭包允许一个函数访问并操作函数外部的变量(即父级作用域中的变量),即使在该函数外部执行。特性:(1)外部函数嵌套内部函数。(2)外部函数可以返回内部函数。(3)内部函数可以访问外部函数的局部变量。defout():print("我是外层")n=10defins():......
  • 如何正确处理Python中的可选功能
    我正在开发实现科学模型的python包,我想知道处理可选功能的最佳方法是什么。这是我想要的行为:如果无法导入某些可选依赖项(例如,在无头机器上绘制模块),我想在我的类中禁用使用这些模块的功能,警告用户如果他尝试使用它们以及所有这些,而不会破坏执行。所以下面的脚本在任何情况下......
  • 在Python中,对于一个数字列表,如何找到具有最大和的数字的连续子集范围?
    输入的一个示例可能是nums1=[-1,4,-3,5,-5]nums2=[-1,4]我想知道这里什么可能是有效的解决方案。谢谢。defmax_subarray_sum_range(nums):"""找到数字列表中具有最大和的连续子集范围。Args:nums:数字列表。Returns:一个包含最大和子集起......
  • 如何安装mysqlclient 1.4.6? (Python 3.6)MacO?
    我安装pipinstallmysqlclient==1.4.6--no-cache-dir但是出现错误:ld:library'ssl'notfoundclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)error:command'clang'failedwithexitstatus......
  • Numpythonic 方式从所需的时间步长和窗口大小构造窗口向量
    给定参数timestep=2window_size=3我已经展平了大小为9的时间序列向量。内容是:arr=np.array([1,2,3,4,5,6,7,8,9])如何使用这些参数重塑/构造窗口时间序列?我希望输出具有形状unknown,window_size)所以,它的输出将是这样的矩阵:windowed_arr=np......
  • Python - 检测字母模式而不迭代所有可能的组合
    对于可能不太有用的标题,我表示歉意,我不知道如何将这个问题总结为一句话。我正在尝试计算Python3.10中一个单词有多少个“单位”长。一个“单位”是(C表示辅音,V表示元音)CV或VC或C或V(后两者仅在没有配对时使用)可以制作)。例如,“件”将为三个单位......
  • scipy.fft (Python) 结果和 FFTW (C) 结果之间的微小差异
    我正在尝试使用C中的FFTW从Python中的一些已知工作代码重新创建结果。我发现结果中有一些小错误。scipy.fft我的输入数据是真实的3d,尺寸=(294,294,294)。我的scipy.fft调用如下所示:我的fftw代码如下所示这个:complex_data_out=scipy.fft.fftn......
  • 如何从 Firebase 保存和显示 Firestore 数据库中的图像
    我正在使用Flask使用Python编写一个用于IT研究的应用程序。我使用FirestoreDatabase作为数据库。一切都很好,但我想知道是否可以将照片保存到给定的集合并从网站上的集合中读取/显示这张照片?我的端点可以更改我想要的用户设置上传这张照片,当然,在正确上传显示之后:@b......
  • 使用 Python 生成多页 PDF 报告,其中包含表格、页眉、页脚和可调整单元格数据(使用 repo
    我想在Python中生成带有表格、页眉、页脚和可调整单元格数据的多页PDF报告(使用reportlab)但是,由于奇怪的原因,字体大小并没有随着表格内容而改变......我尝试在这里改变:('FONTSIZE',(0,1),(-1,-1),24),#内容的字体大小但什么也没发生importtimefromreportlab......
  • 通过 Sendgrid API 发送电子邮件时出错
    在我的生产服务器上,我收到以下错误“init()得到了意外的关键字参数'apikey'”开发服务器上的相同代码正在运行。我的生产服务器正在运行gunicorn,我已将环境变量SENDGRID_API_KEY添加到gunicorn.service文件中。我已经重新启动了gunicorn和nginx。我可以看......