1 最简单的程序
最简单的 FastAPI 文件可能像下面这样:
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
进入文件所在目录,运行实时服务器。
uvicorn Test:app --reload
uvicorn main:app
命令含义如下:
Test
:Test.py
文件(一个 Python「模块」)。app
:在Test.py
文件中通过app = FastAPI()
创建的对象。--reload
:让服务器在更新代码后重新启动。仅在开发时使用该选项。
打开浏览器访问 http://127.0.0.1:8000。
1.1 交互式 API 文档
跳转到 http://127.0.0.1:8000/docs。你将会看到自动生成的交互式 API 文档(由 Swagger UI 提供):
1.2 可选的 API 文档¶
前往 http://127.0.0.1:8000/redoc。你将会看到可选的自动生成文档 (由 ReDoc 提供):
1.3 OpenAPI
FastAPI 使用定义 API 的 OpenAPI 标准将你的所有 API 转换成「模式」。
- 「模式」:是对事物的一种定义或描述。它并非具体的实现代码,而只是抽象的描述。
- API「模式」:在这种场景下,OpenAPI 是一种规定如何定义 API 模式的规范。定义的 OpenAPI 模式将包括你的 API 路径,以及它们可能使用的参数等等。
- 数据「模式」:这个术语也可能指的是某些数据比如 JSON 的结构。在这种情况下,它可以表示 JSON 的属性及其具有的数据类型,等等。
OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送和接收的数据的定义(或称为「模式」),这些定义通过 JSON 数据模式标准 JSON Schema 所生成。如果你对原始的 OpenAPI 模式长什么样子感到好奇,其实它只是一个自动生成的包含了所有 API 描述的 JSON。
你可以直接在:http://127.0.0.1:8000/openapi.json 看到它。
{"openapi": "3.1.0","info": {"title": "FastAPI","version": "0.1.0"},"paths": {"/": {"get": {"summary": "Root","operationId": "root__get","responses": {"200": {"description": "Successful Response","content": {"application/json": {"schema": {}}}}}}}}
}
驱动 FastAPI 内置的 2 个交互式文档系统的正是 OpenAPI 模式。并且还有数十种替代方案,它们全部都基于 OpenAPI。你可以轻松地将这些替代方案中的任何一种添加到使用 FastAPI 构建的应用程序中。你还可以使用它自动生成与你的 API 进行通信的客户端代码。例如 web 前端,移动端或物联网嵌入程序。
2 步骤概括
2.1 导入 FastAPI
from fastapi import FastAPI
FastAPI
是一个为你的 API 提供了所有功能的 Python 类。FastAPI
是直接从 Starlette
继承的类。你可以通过 FastAPI
使用所有的 Starlette 的功能。
2.2 创建一个 FastAPI
「实例」
app = FastAPI()
这里的变量 app
会是 FastAPI
类的一个「实例」。这个实例将是创建你所有 API 的主要交互对象。这个 app
同样在如下命令中被 uvicorn
所引用:
uvicorn main:app --reload
2.3 创建一个路径操作
这里的「路径」指的是 URL 中从第一个 /
起的后半部分。路径」也通常被称为「端点」或「路由」。开发 API 时,「路径」是用来分离「关注点」和「资源」的主要手段。所以,在一个这样的 URL 中:
https://example.com/items/foo
路径会是:
/items/foo
@app.get("/") 这里的「操作」指的是一种 HTTP「方法」。分别是:
POST
GET
PUT
DELETE
以及更少见的几种:
OPTIONS
HEAD
PATCH
TRACE
在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。在开发 API 时,你通常使用特定的 HTTP 方法去执行特定的行为。 因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」。通常使用:
POST
:创建数据。GET
:读取数据。PUT
:更新数据。DELETE
:删除数据。
@app.get("/")
告诉 FastAPI 在它下方的函数负责处理如下访问请求:
- 请求路径为
/
- 使用
get
操作
你也可以使用其他的操作:
@app.post()
@app.put()
@app.delete()
以及更少见的:
@app.options()
@app.head()
@app.patch()
@app.trace()
2.4 路径操作函数
这是我们的「路径操作函数」:
- 路径:是
/
。 - 操作:是
get
。 - 函数:是位于「装饰器」下方的函数(位于
@app.get("/")
下方)。
@app.get("/")
async def root(): # 路径操作函数return {"message": "Hello World"}
这是一个 Python 函数。每当 FastAPI 接收一个使用 GET
方法访问 URL「/
」的请求时这个函数会被调用。在这个例子中,它是一个 async
函数。你也可以将其定义为常规函数而不使用 async def
:
@app.get("/")
def root():return {"message": "Hello World"}
async / await 在执行操作函数中将等待 await 返回结果。
2.5 返回内容
@app.get("/")
def root():return {"message": "Hello World"} # 返回内容
你可以返回一个 dict
、list
,像 str
、int
一样的单个值,等等。还可以返回 Pydantic 模型。还有许多其他将会自动转换为 JSON 的对象和模型(包括 ORM 对象等)。尝试下使用你最喜欢的一种,它很有可能已经被支持。