如何在 Ubuntu 上使用 Flask 创建 REST API
介绍
在本教程中,您将学习如何使用 Flask(一个轻量级 Python Web 框架)创建简单的 REST API。我们将介绍设置 Flask 应用程序、定义路由、处理请求和返回 JSON 响应的基础知识。在本教程结束时,您将拥有一个可以扩展并与其他应用程序集成的可用 API。
先决条件
运行 Ubuntu 的服务器和具有 sudo 权限的非 root 用户以及活动防火墙。有关如何设置的指南,请从此列表中选择您的发行版并遵循我们的初始服务器设置指南。请确保使用受支持的 Ubuntu 版本。
熟悉 Linux 命令行。有关命令行的介绍或复习,您可以访问 Linux 命令行入门指南
对 Python 编程有基本的了解。
Ubuntu 系统上安装了 Python 3.7 或更高版本。要了解如何在 Ubuntu 上运行 Python 脚本,您可以参考我们的如何在 Ubuntu 上运行 Python 脚本教程。
第 1 步 — 设置 Flask 环境
Ubuntu 24.04 默认附带 Python 3。打开终端并运行以下命令来仔细检查 Python 3 安装:
root@ubuntu:~# python3 --version
Python 3.12.3
如果您的计算机上已安装 Python 3,则上述命令将返回当前安装的 Python 3 版本。如果尚未安装,您可以运行以下命令并安装 Python 3:
root@ubuntu:~# sudo apt install python3
接下来,您需要在系统上安装 pip
软件包安装程序:
root@ubuntu:~# sudo apt install python3-pip
安装完 pip
后,让我们安装 Flask。
您将通过 pip
安装 Flask。建议在虚拟环境中执行此操作,以避免与系统上的其他软件包发生冲突。
root@ubuntu:~# python3 -m venv myprojectenv
root@ubuntu:~# source myprojectenv/bin/activate
root@ubuntu:~# pip install Flask
第 2 步 - 创建 Flask 应用程序
下一步是为 Flask 应用程序编写 Python 代码。要创建新脚本,请导航到您选择的目录:
root@ubuntu:~# cd ~/path-to-your-script-directory
在目录中,创建一个新的 Python 文件 app.py,
并导入 Flask。然后,初始化 Flask 应用程序并创建基本路由。
root@ubuntu:~# nano app.py
这将打开一个空白的文本编辑器。在这里写下你的逻辑或复制以下代码:
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]
第 3 步 — 创建 RESTful 路由
在本节中,我们将在 Flask 应用程序中定义与用户可以在 API 上执行的不同操作相对应的路由。每个路由将处理特定的 HTTP 方法。
GET
、POST
、PUT
和 DELETE
。这些方法对应于持久存储的四个基本操作——通常称为 CRUD(创建、读取、更新、删除)。
将以下路由添加到您的 app.py
python 脚本中:
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]
GET request: Retrieve all items
@app.route('/api/items', methods=['GET'])
def get_items():
return jsonify(items)
GET request: Retrieve a specific item by ID
@app.route('/api/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Item not found"}), 404
return jsonify(item)
POST request: Create a new item
@app.route('/api/items', methods=['POST'])
def create_item():
new_item = {"id": len(items) + 1, "name": request.json.get('name')}
items.append(new_item)
return jsonify(new_item), 201
PUT request: Update an existing item
@app.route('/api/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Item not found"}), 404
item['name'] = request.json.get('name', item['name'])
return jsonify(item)
DELETE request: Delete an item
@app.route('/api/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
global items
items =
!= item_id]
return '', 204
if __name__ == "__main__":
app.run(debug=True)
让我们更多地了解每个函数的作用:
Flask 导入:代码从 Flask 导入必要的组件:
Flask
、jsonify
和request
。内存中数据存储:
items
是一个简单的字典列表,充当 API 的临时数据存储。每个项目都有一个id
和一个name
。GET
/api/items
:当向/api/items
发出GET
请求时,服务器返回一个项目数据存储中所有项目的列表。这对于检索集合中的所有资源非常有用。POST
/api/items
:对/api/items
的 POST 请求允许客户端创建新项目。服务器期望在请求正文中包含一个包含新项目详细信息的 JSON 对象。创建项目后,服务器会使用新创建的项目和201 Created
状态代码进行响应。PUT
/api/items/
:对/api/items/
PUT 请求code> 用于更新具有指定item_id
的现有项目。客户端在请求正文中发送更新的数据,服务器修改现有项目。如果未找到该项目,服务器将返回404 Not Found
错误。DELETE
/api/items/
:对/api/items/
DELETE 请求code> 从数据存储中删除具有指定item_id
的项目。如果成功删除该项目,服务器会返回204 No Content
状态代码,表示删除成功并且没有更多内容可返回。运行应用程序:
if __name__ == "__main__":
块确保直接执行脚本时 Flask 应用程序运行。
第 4 步 — 运行和测试您的 API
使用以下命令启动 Flask 服务器:
root@ubuntu:~# python3 app.py
您应该注意到 Flask 服务器正在运行并显示以下输出:
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 837-877-972
从上面的输出中,您可以注意到服务器正在 http://127.0.0.1
上运行并侦听端口 5000
。
现在,您可以使用 curl
、Postman 或其他 HTTP 客户端测试端点。在本教程中,您将使用 curl
测试端点并发送 HTTP 请求。
打开另一个 Ubuntu 控制台并一一执行以下 curl
命令:
- 获取:
curl http://127.0.0.1:5000/api/items
- POST:
curl -X POST -H "Content-Type: application/json" -d '{"name": "This is item 3"}' http://127.0.0.1 :5000/api/项目
- PUT:
curl -X PUT -H "Content-Type: application/json" -d '{"name": "这是更新的项目 1"}' http://127.0.0. 0.1:5000/api/items/1
- 删除:
curl -X DELETE http://127.0.0.1:5000/api/items/1
让我们看看每个命令的实际效果:
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
[
{
"id": 1,
"name": "This is item 1"
},
{
"id": 2,
"name": "This is item 2"
}
]
您会注意到服务器返回项目数据存储中所有项目的列表。
使用 POST
方法,让我们向数据存储区添加一个新项目。
root@ubuntu:~# curl -X POST -H "Content-Type: application/json" -d '{"name": "This is item 3"}' http://127.0.0.1:5000/api/items
{
"id": 3,
"name": "This is item 3"
}
注意:在运行 Flask 服务器的其他控制台上,您会注意到所有正在执行的 HTTP 请求及其响应代码。
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 837-877-972
127.0.0.1 - - [23/Aug/2024 06:57:27] "GET /api/items HTTP/1.1" 200 -
127.0.0.1 - - [23/Aug/2024 06:59:56] "POST /api/items HTTP/1.1" 201 -
这是监视、调试和解决服务器问题的好方法。
接下来,让我们执行一个 PUT
请求。对 /api/items/
的 PUT
请求将使用指定的 item_id
更新现有项目。
root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "This is updated item 1"}' http://127.0.0.1:5000/api/items/1
{
"id": 1,
"name": "This is updated item 1"
}
现在,让我们执行 GET
请求来查看更新的项目 1。
root@ubuntu:~# curl http://127.0.0.1:5000/api/items/1
{
"id": 1,
"name": "This is updated item 1"
}
最后,让我们执行一个 DELETE
请求以从数据存储中删除一个项目。
root@ubuntu:~# curl -X DELETE http://127.0.0.1:5000/api/items/1
这将从数据存储中删除项目 1。
为了验证这一点,让我们执行一个 GET 请求。
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
[
{
"id": 2,
"name": "This is item 2"
},
{
"id": 3,
"name": "This is item 3"
}
]
您会注意到项目 1 不再存在并被永久删除。
结论
在本教程中,您使用 Flask 构建了一个基本的 REST API 应用程序。您现在可以使用其他路由扩展此 API、与数据库集成或将其部署到 DigitalOcean 等云平台。 Flask 是一个强大的工具,可以快速高效地构建 API,有了这些基础知识,您就可以开始构建更复杂的应用程序了。