API 代表应用程序编程接口,是软件开发中最基本的概念之一。它允许程序通过发送和接收数据与其他服务进行交互。在 API 网络通信中,最常用的标准之一是REST,它依赖于JSON格式或键值对,类似于 Python 的字典。
在本文中,我想专注于实际实现,并立即开始构建 API。如果你想在 Python 中构建一个 API,你可以选择几种框架。Flask-RESTful、Django Rest Framework 和 FastAPI 是最流行的。然而,FastAPI 是专门为快速 API 应用设计的。为什么我推荐你首选 FastAPI?
- 自动生成文档 — FastAPI 根据 OpenAPI 标准自动生成全面的文档,节省时间和精力。
- 快速简单 — 设计用于高性能和高效执行。
- 数据验证 — FastAPI 构建在 Pydantic 之上,提供一系列有用的功能,如数据验证和异步支持。
虽然 Django Rest Framework 在许多公司中也常用,但让我们从 FastAPI 开始,因为它的好处更多。话虽如此,让我们在简要理论介绍之后,继续迈向编写 FastAPI 代码的第一步。
简要介绍
请求的Endpoint
如前所述,API 作为不同服务和应用之间通信的手段。这种通信通常由服务器端基础设施和 API 的后端实现来促成。这个后端的目的可能是在不需要直接连接到数据库的情况下提供对数据的访问,从而最大程度地减少对数据库的请求。
在 API 通信中,我们通常有一个指定的终点,它可能出现在网站末尾的 /api/item/5。这种方法非常有利,因为它允许我们利用同一终点从各种设备请求数据,并接收相同的响应。
HTTP 方法
虽然我不想深入讨论理论概念,但理解在处理 API 时不同方法之间的区别是很重要的。让我们快速回顾一下最常用的方法:
- GET — 用于检索数据
- POST — 用于写入新数据
- DELETE — 删除你的数据
- PUT — 更新现有信息
虽然还有其他选项,但这些是你应该开始使用的基本方法。重要的是要注意 POST 和 PUT 之间的区别。两者都可以用于添加数据,但 POST 用于写入新项目,而 PUT 用于使用更新后的值更新现有项目。
请记住,这只是编写 API 的指南。你可以按照自己的方式使用这些方法,但最好遵循行业标准。今天我想专注于实现一个简单的 GET 方法。
构建你的第一个 API
运行第一个 FastAPI 服务器
首先,我们需要安装所有依赖项。你至少需要安装 fastapi
包以及 uvicorn
服务器和 pydantic
。第一行应安装所有列出的库,但请检查是否已安装了所有包。
pip install fastapi[all]
pip install uvicorn
pip install pydantic
现在,让我们通过使用装饰器和必要的方法和终点来创建一个基本的 FastAPI 应用程序。在这个例子中,我们将使用 GET 方法检索使用空终点 /
的数据。在本文中,我不会讨论装饰器,这超出了 API 主题的范围。然而,在 FastAPI 上下文中,我们利用 应用程序名称、方法 和 终点。在函数之前,你可能会注意到一行代码,它负责将所有 FastAPI 进程添加到我们的方法中。
from fastapi import FastAPI
app = FastAPI()
@app.get('/') # get method to empty endpoint
def first_response():
return {
"response": "first"}
要查看响应,你可以使用 uvicorn
运行服务器。默认情况下,你的服务器位于端口 8000,并且可以通过 http://127.0.0.1:8000 访问。在开发过程中,你可以使用 --reload
选项确保服务器对代码的任何更改做出反应。
uvicorn main:app
uvicorn main:app --reload
作为另一种选择,你也可以使用 curl
来获取相同的响应。
curl 127.0.0.1:8000
#{"response": "first"}
curl 127.0.0.1:8000 -X POST
#{"detail":"Method Not Allowed"}
最后,我们可以使用 requests
库来访问我们的终点,并在 Python 中打印响应。
import requests
print(requests.get('http://127.0.0.1:8000').json())
#{'response': 'first'}
使用 JSON 文件中的数据
让我们继续下一步,处理一些实际数据。为了简化目前的情况,我们可以创建一个带有一些输入的 JSON 文件。例如,我们可以从纳斯达克(NASDAQ)选择三只股票,并创建一个带有可以用于获取所需项目并执行其他方法的符号的示例。
{
"stocks": [
{
"symbol": "TSLA",
"stockname": "特斯
拉公司普通股",
"lastsale": "$235.45",
"country"