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