路径也通常被称为端点或路由
最简单的 FastAPI 文件可能像下面这样:
from fastapi import FastAPI
app = FastAPI()@app.get("/")async def root():
return {"message": "Hello World"}将其复制到 main.py 文件中。
启动服务
uvicorn main:app --reloaduvicorn main:app 命令含义如下:
main:
main.py 文件(一个 Python「模块」)。app:
在 main.py 文件中通过 app = FastAPI() 创建的对象。--reload:
让服务器在更新代码后重新启动。
仅在开发时使用该选项。在输出中,会有一行信息像下面这样:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)该行显示了你的应用在本机所提供服务的 URL 地址。
打开浏览器访问 http://127.0.0.1:8000
{"message": "Hello World"}在这个例子中,它是一个 async 异步函数。
你也可以将其定义为常规函数而不使用 async def:
from fastapi import FastAPI
app = FastAPI()@app.get("/")def root():
return {"message": "Hello World"}步骤 1:导入 FastAPI
from fastapi import FastAPIFastAPI 是一个为你的 API 提供了所有功能的 Python 类。FastAPI 是直接从 Starlette 继承的类。
步骤 2:创建一个 FastAPI「实例」
app = FastAPI()这里的变量 app 会是 FastAPI 类的一个「实例」。
这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用:
uvicorn main:app --reload如果你创建的实例不是app,如下
api = FastAPI()将代码放入 main.py 文件中,然后你可以像下面这样运行 uvicorn:
uvicorn main:api --reload步骤 3:创建一个路径操作
这里的「路径」指的是 URL 中从第一个 / 起的后半部分。
所以,在一个这样的 URL 中:
https://example.com/items/foo路径会是 /items/foo
「路径」也通常被称为「端点」或「路由」。
开发 API 时,「路径」是用来分离「关注点」和「资源」的主要手段。
操作 这里的「操作」指的是一种 HTTP「方法」。 下列之一:
POSTGETPUTDELETE
以及更少见的几种:OPTIONSHEADPATCHTRACE在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。 在开发 API 时,你通常使用特定的 HTTP 方法去执行特定的行为。
通常使用:
POST:
创建数据。GET:
读取数据。PUT:
更新数据。DELETE:
删除数据。因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」。我们也打算称呼它们为「操作」。
定义一个_路径操作装饰器
@app.get("/")@app.get("/") 告诉 FastAPI 在它下方的函数负责处理如下访问请求:
/get 操作你也可以使用其他的操作:
@app.post()@app.put()@app.delete()以及更少见的:
@app.options()@app.head()@app.patch()@app.trace()步骤 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"}步骤 5:返回内容
return {"message": "Hello World"}你可以返回一个 dict、list,像 str、int 一样的单个值,等等。
你还可以返回 Pydantic 模型(稍后你将了解更多)。
还有许多其他将会自动转换为 JSON 的对象和模型(包括 ORM 对象等)。尝试下使用你最喜欢的一种,它很有可能已经被支持。
总结
FastAPI。app 实例。@app.get("/"))。def root(): ...)。uvicorn main:app --reload)。