在这个教程中,我将展示如何使用 Flask 在 Python 中几个简单的步骤内创建 API。我将演示如何在几分钟内创建 GET 和 POST 方法。
如何使用 Flask 在 Python 中创建 API
API 在互联网和现代信息基础设施中发挥着至关重要的作用。API,即应用程序编程接口,包括一组规则、协议和工具,使得软件能够相互通信。API 促使两个软件系统之间进行结构化和预定义的交互,使它们能够交换信息或执行操作。
考虑这个例子:当您登录到 Medium 帐户时,您正在使用一个 API。通过使用您的用户名和密码提交登录表单后,此信息会迅速传输到服务器进行验证。服务器然后验证凭据并发送响应,在成功验证后授予您访问权限。这展示了 API 的功能。
存在各种类型的 API 和多种实现方法。在本教程中,我将指导您使用 Flask 在 Python 中构建 API,Flask 是一个广泛用于开发网站和 API 的 Web 框架。具体而言,我们将创建一个 GET 和一个 POST API。如果当前对 GET 和 POST 的概念还不清楚,不用担心 —— 我将在后面提供详细的解释。
目录:
在互联网的背景下,我们已经讨论了 API 的重要性,但我们还没有深入探讨如何使用 Python 创建一个 API。Python 以其简单性而广受认可,是一种广泛使用的编程语言。
Python 的语法清晰易读,使其非常适合开发和维护各种软件项目,包括构建 API。此外,Python 拥有一个庞大且高度活跃的社区,这是导致其在各种软件项目中广泛采用的关键因素。
Flask 是一个专为在 Python 中开发 Web 应用程序而设计的微框架。它具有轻量、快速、简单和灵活的特点。利用 Flask 可以创建复杂的 Web 应用程序,如 API。
Flask 以 Python 为基础,依赖于 WSGI 工具,这是一个用于 Python Web 应用程序的协议系统,以及 Jinja2,一个基于 Python 的模板引擎。
Flask 的一大亮点在于其简单性和广泛的定制可能性。仅需几行代码,您就可以建立一个 API 端点(称为托管 API 的 URL),并轻松集成一个 HTML 模板。
在接下来的部分,我将向您介绍如何使用 Python 和 Flask 构建 GET 和 POST API,所有操作都在一个简洁的代码块中完成。
注意:首先确保使用 pip install flask
或 conda install flask
(如果您使用 conda 虚拟环境管理器)安装 Flask。
GET 方法是一种使用超文本传输协议(HTTP)从源检索信息的 API 类型。此方法用于向服务器发送请求,在 URL 中作为查询的请求参数可用。GET 请求的示例:
https://api.example.com/data?key1=value1&key2=value2
您正在向服务器发送有关 ‘key1’ 的请求,其值为 ‘value1’,以及 ‘key2’ 的请求,其值为 ‘value2’。数据和信息是公开可用的,除了用于查询的参数外,无需向服务器发送其他参数。例如,不需要凭据或证书。
GET 方法在加载网站时也会使用。在本节中,我们将使用 Flask 在 Python 中创建一个 GET API,以返回一个简单的 HTML 页面。
让我们编写代码!将以下代码保存为 “app.py”:
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def index():
return """
Congratulations
Congratulations, this is your first API endpoint!
"""
if __name__ == '__main__':
app.run(debug=True)
嗯,现在只需使用命令 flask run --app app
启动 Flask 应用程序,然后转到 http://127.0.0.1:5000。您将看到您的第一个在 Python 中使用 Flask 创建的 GET API:
这是一个非常简单的案例,但应该很有信息量。我们将 API 运行的 URL 称为“端点”。
让我们尝试构建一个稍微复杂的例子。我们将创建一个 GET 端点,通过查询参数可以请求数据。我们在 .py 文件的“服务器”中的数据将是:
data = [
{"city": "Napoli", "country": "Italy"},
{"city": "Pisa", "country": "Italy"},
{"city": "Reykjavik", "country": "Iceland"},
{"city": "Akureyri", "country": "Iceland"}
]
现在,我们将在“/cities”站点中创建一个部分。请记住 Flask 应用程序仍然需要运行(使用命令 flask run --app app
)。
from flask import Flask, jsonify, request
app = Flask(__name__)
# 提供的数据
data = [
{"city": "Napoli", "country": "Italy"},
{"city": "Pisa", "country": "Italy"},
{"city": "Reykjavik", "country": "Iceland"},
{"city": "Akureyri", "country": "Iceland"}
]
@app.route('/cities', methods=['GET'])
def get_cities():
return jsonify(data)
如果访问此页面,将返回我们数据集中的所有城市:
[
{
"city": "Napoli",
"country": "Italy"
},
{
"city": "Pisa",
"country": "Italy"
},
{
"city": "Reykjavik",
"country": "Iceland"
},
{
"city": "Akureyri",
"country": "Iceland"
}
]
如果我们想要使用 URL 通过查询参数过滤我们的数据,该怎么办呢?好吧,我们需要在我们的代码中添加一些行。我们将使用 Python 中的条件语句实现简单的逻辑。我们将接受查询参数如下:
因此,我们将以如下方式创建一个 if-then-else 语句:
if city and country:
filtered_cities = [c for c in data if c['city'] == city and c['country'] == country]
return jsonify(filtered_cities)
elif city:
filtered_cities = [c for c in data if c['city'] == city]
return jsonify(filtered_cities)
elif country:
filtered_cities = [c for c in data if c['country'] == country]
return jsonify(filtered_cities)
else:
return jsonify(data)
在该代码中,我们可以处理所有可能的组合。如果我们应用筛选器,我们将收到经过筛选的数据,否则我们仍将得到经过筛选的数据。
完整的新代码将是:
from flask import Flask, jsonify, request
app = Flask(__name__)
data = [
{"city": "Napoli", "country": "Italy"},
{"city": "Pisa", "country": "Italy"},
{"city": "Reykjavik", "country": "Iceland"},
{"city": "Akureyri", "country": "Iceland"}
]
@app.route('/cities', methods=['GET'])
def get_cities():
city = request.args.get('city')
country = request.args.get('country')
if city and country:
filtered_cities = [c for c in data if c['city'] == city and c['country'] == country]
return jsonify(filtered_cities)
elif city:
filtered_cities = [c for c in data if c['city'] == city]
return jsonify(filtered_cities)
elif country:
filtered_cities = [c for c in data if c['country'] == country]
return jsonify(filtered_cities)
else:
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
让我们试一个例子:如果我们想要获取一个意大利城市,我们可以使用此 URL:http://127.0.0.1:5000/cities?country=Italy
[
{
"city": "Napoli",
"country": "Italy"
},
{
"city": "Pisa",
"country": "Italy"
}
]
太好了!但是如果我们想要输入一些数据怎么办?要输入用户数据,我们不能使用 GET 方法。到目前为止,我们从服务器或 URL 获取数据时没有发送数据,除了参数之外。如果我们想要发送数据,我们将不得不创建一个 POST 方法。
POST 方法使我们能够向服务器传递信息。例如,当我们使用登录表单时,我们将凭据发送到服务器以验证其准确性,并获取对服务的访问权限。这个操作不仅仅是从服务器接收数据,用户还在向服务器传递数据。
考虑这种情况:我们想要将一个新的城市添加到我们网站城市数据集中。我们应该如何实现呢?答案就在于使用 POST 方法。
让我们看看如何在 Python 中使用 Flask 创建 POST API。我们可以选择使用相同的端点,也可以创建一个新的端点。为了方便起见,我们选择了前者,但方法的选择并不重要。
以下是实现这一目标的代码:
@app.route('/cities', methods=['POST'])
def add_city():
new_city = request.json
if 'city' in new_city and 'country' in new_city:
data.append(new_city)
return jsonify({"message": "成功添加城市", "city": new_city}), 201
else:
return jsonify({"error": "城市和国家是必填字段"}), 400
我们将发送一个包含新数据的 JSON(一个简单的 Python 字典),这个端点将把新数据附加到我们的城市数据集中,并返回一个带有代码的消息。通过将这些代码行加入到我们之前的代码中,我们的 Python 文件将如下所示:
from flask import Flask, jsonify, request
app = Flask(__name__)
# 提供的数据
data = [
{"city": "Napoli", "country": "Italy"},
{"city": "Pisa", "country": "Italy"},
{"city": "Reykjavik", "country": "Iceland"},
{"city": "Akureyri", "country": "Iceland"}
]
@app.route('/cities', methods=['GET'])
def get_cities():
return jsonify(data)
@app.route('/cities',
methods=['POST'])
def add_city():
new_city = request.json
if 'city' in new_city and 'country' in new_city:
data.append(new_city)
return jsonify({"message": "成功添加城市", "city": new_city}), 201
else:
return jsonify({"error": "城市和国家是必填字段"}), 400
if __name__ == '__main__':
app.run(debug=True)
要在 Python 中使用 POST 方法发送数据,我们需要在一个单独的 Python 文件中执行几行代码。执行 Python 中的 POST 请求的代码如下:
import requests
url = 'http://127.0.0.1:5000/cities'
data = {'city': 'Sevilla', 'country': 'Spain'}
x = requests.post(url, json=data)
print(x.text)
注意:请记住 Flask 应用程序仍然需要运行。 (使用命令 flask run --app app
)
现在,让我们尝试通过添加城市 = ‘Sevilla’ 和国家 = ‘Spain’ 来进行 POST 请求。我们将观察到以下输出:
{
"city": {
"city": "Sevilla",
"country": "Spain"
},
"message": "成功添加城市"
}
如果现在调用我们的端点会发生什么?以下是更新的数据:
[
{
"city": "Napoli",
"country": "Italy"
},
{
"city": "Pisa",
"country": "Italy"
},
{
"city": "Reykjavik",
"country": "Iceland"
},
{
"city": "Akureyri",
"country": "Iceland"
},
{
"city": "Sevilla",
"country": "Spain"
}
]
太棒了!我们成功地用几个简单的步骤在 Python 中使用 Flask 构建了一个 POST API。现在,我们可以使用 GET 方法从 URL 或服务器检索数据,并使用 POST 方法添加新数据。
在本教程中,我演示了如何使用 Flask 在 Python 中创建 API。我们探讨了 API 在网络中的重要性,以及为什么选择 Python 作为构建它们的合适选择。同时,我们深入了解了在 Python 中使用 Flask 创建 GET 和 POST API 的过程。