今天,我们要提升技能,构建一些真实的东西——你自己的第一个使用Flask的REST API。到最后,你将拥有一个在你电脑上运行的实际后端服务。让我们开始吧!

什么是REST API?🤔

把REST API想象成一个餐厅里的服务员

  • 客户端(比如你的React应用)是饥饿的顾客,他们下订单(发送请求)
  • 你的API接收这些订单,前往厨房(你的数据库/业务逻辑),然后带着食物(数据)回来

这只是不同应用程序通过互联网相互通信的一种方式。没什么可怕的!

为什么选择Flask?💡

Flask是Python的轻量级Web框架,它不会强迫你使用复杂的模式。它是:

  • 极简主义:没有你不需要的臃肿功能
  • 灵活:完全可以根据你的需求构建
  • 适合初学者:从小开始,逐步扩展

此外,像Netflix、LinkedIn和Uber这样的公司也在使用Flask来提供他们的一些服务。你选择的框架很不错!

设置您的环境 🛠️

首先,让我们为我们的项目创建一个专用空间:

# 创建项目文件夹
mkdir flask_api_project
cd flask_api_project

# 创建并激活虚拟环境
python -m venv venv

# 在 Windows 上
venv\Scripts\activate

# 在 macOS/Linux 上
source venv/bin/activate

# 安装 Flask
pip install flask

你的第一个 Flask API 🎉

创建一个名为 app.py 的文件,并添加以下代码:

from flask import Flask, jsonify

# 初始化 Flask 应用
app = Flask(__name__)

# 示例数据 - 想象这就是你的数据库
books = [

{id: 1, title: Python速成课程, author: 埃里克·马修斯},
{id: 2, title: 自动化无聊的工作, author: 阿尔·斯威加特},


{
  "id": 3,
  "title": "Fluent Python",
  "author": "Luciano Ramalho"
}

]

# 根路由
@app.route(‘/’)
def hello():
return jsonify({
“message”: “欢迎使用我们的书店API!”
})

# 获取所有书籍


@app.route('/api/books', methods=['GET'])
def get_books():
return jsonify({"books": books})

# 获取特定书籍
@app.route(‘/api/books/’, methods=[‘GET’])
def get_book(book_id):


book = next((book for book in books if book["id"] == book_id), None)
if book:
return jsonify({"book": book})
return jsonify({"message": "未找到书籍"}), 404

# 运行服务器
if __name__ == __main__:


html
app.run(debug=True)


让我们来分析一下发生了什么:

 

运行您的 API 🏃‍♀️

在您的终端中:

python app.py

你应该会看到类似以下内容:

 * 正在运行于 http://127.0.0.1:5000/ (按 CTRL+C 退出)
 * 正在使用 stat 重启
 * 调试器已激活!

恭喜!您的 API 正在运行!🎉 您做到了!

测试您的 API 端点 🧪

打开您的浏览器并访问:

或者使用像 Postman 这样的工具进行更高级的测试。

使其互动:POST、PUT、DELETE 🔄

让我们升级我们的 API,以允许创建、更新和删除书籍。更新您的 app.py


from flask import Flask, jsonify, request

# 初始化 Flask 应用
app = Flask(__name__)

# 示例数据
books = [
    {"id": 1, "title": "Python Crash Course", "author": "Eric Matthes"},

[
    {
        "id": 2,
        "title": "自动化无聊的事情",
        "author": "阿尔·斯威加特"
    },
    {
        "id": 3,
        "title": "流利的Python",
        "author": "卢西亚诺·拉马尔霍"
    }
]

# 根路由
@app.route(‘/’)


python
def hello():
return jsonify({message: 欢迎使用我们的书店API!})

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

# 获取特定书籍

python
@app.route(‘/api/books/’, methods=[‘GET’])
def get_book(book_id):
book = next((book for book in books if book[“id”] == book_id), None)
if book:
return jsonify({“book”: book})
这段代码定义了一个API路由,用于获取特定书籍的信息。通过`@app.route`装饰器,指定了路由的路径和允许的HTTP方法。在`get_book`函数中,使用`next`函数从书籍列表中查找与给定`book_id`匹配的书籍。如果找到了对应的书籍,则返回该书籍的JSON格式数据。


return jsonify({"message": "未找到书籍"}), 404

# 创建一本新书
@app.route('/api/books', methods=['POST'])
def add_book():
    if not request.json or not 'title' in request.json or not 'author' in request.json:

return jsonify({"message": "请提供标题和作者"}), 400

    # 查找现有的最高 ID 并加 1
    new_id = max(book["id"] for book in books) + 1

    new_book = {
        "id": new_id,
        "title": request.json["title"],

作者: 请求.json[作者]
}
书籍.追加(新书)
返回 jsonify({书籍: 新书}), 201

# 更新一本书
@app.route(/api/books/<int:book_id>, 方法=[PUT])
定义 更新书籍(书籍_id):

book = next((book for book in books if book[id] == book_id), None)
if not book:
return jsonify({message: 未找到书籍}), 404


book["title"] = request.json.get("title", book["title"])
book["author"] = request.json.get("author", book["author"])
return jsonify({"book": book})

# 删除一本书

@app.route('/api/books/', methods=['DELETE'])
def delete_book(book_id):
    global books
    book = next((book for book in books if book["id"] == book_id), None)
    if not book:

return jsonify({"message": "未找到书籍"}), 404

    books = [book for book in books if book["id"] != book_id]
    return jsonify({"message": "书籍已删除"})

# 运行服务器
if __name__ == '__main__':

app.run(debug=True)

现在您的 API 可以:

这完成了大多数 API 所需的 CRUD 操作(创建、读取、更新、删除)!

测试新端点 🧪

对于POST、PUT和DELETE请求,您需要使用像 Postmancurl 这样的工具。

使用curl的POST请求示例:

curl -X POST http://localhost:5000/api/books \
  -H "Content-Type: application/json" \
  -d '{"title": "Learn Python the Hard Way", "author": "Zed Shaw"}'

让你的API准备好投入生产 🚦

 

在实际场景中,你可能想要:

下一步 🚀

准备好提升技能了吗?尝试这些挑战:

 

结论 🎯

 

你做到了!你用Flask构建了你的第一个REST API。曾经看似复杂的后端魔法,现在是你理解并能自己构建的东西!

记住,这只是一个开始。RESTful API 是现代 web 应用程序的支柱,而你刚刚迈出了进入这个世界的第一步。继续实验,继续构建,最重要的是,享受这个过程

——

来QPY+学AI课程:https://www.qpython.com.cn/ai-courses/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注