FastAPI 核心概念:构建高性能的 Python Web 服务
本文详细解析了如何利用 FastAPI 构建高性能的 Python Web 服务,帮助开发者从零开始创建功能丰富、响应迅速的 API。结合完整的代码示例和分步操作指导,文章深入讲解了 FastAPI 的核心概念,包括路径、操作、装饰器、HTTP 方法等,带来直观清晰的学习体验。通过掌握路径操作装饰器的使用及 Uvicorn 的启动配置,你将能快速构建出强大、可靠的 Python Web 应用,夯实高效 API 开发的基础。
文章目录
- FastAPI 核心概念:构建高性能的 Python Web 服务
- 一 简单的 FastAPI 应用示例
- 二 自定义 FastAPI 的实例对象
- 三 自定义 uvicorn 启动
- 四 术语
- 1 路径
- 2 操作
- 五 定义一个路径操作装饰器
- 1 装饰器
- 2 解释说明
- 六 返回内容
- 七 完整代码示例
- 八 源码地址
一 简单的 FastAPI 应用示例
# 从fastapi库导入FastAPI类,用于创建FastAPI应用实例
from fastapi import FastAPI# 创建一个FastAPI应用实例,app将作为应用的入口
app = FastAPI()# 使用@app.get("/")装饰器定义一个GET请求的路由
# 当用户访问根路径 ("/") 时,FastAPI会调用下面的函数
@app.get("/")
async def root():# 定义返回的响应内容,这里返回一个JSON对象 {"message": "Hello World"}return {"message": "Hello World"}
FastAPI 是一个为 API 提供功能的 Python 类,直接从 Starlette 继承。可以通过 FastAPI 使用所有 Starlette 的功能。app 同样会被 uvicorn 所引用。
$ uvicorn main:app --reload
注释:
uvicorn main:app
命令含义如下:
main
:main.py
文件(Python 模块)。app
:在main.py
文件中通过app = FastAPI()
创建的对象。--reload
:让服务器在更新代码后重新启动,仅在开发时使用该选项。
二 自定义 FastAPI 的实例对象
from fastapi import FastAPI# FastAPI 的实例对象
my_awesome_api = FastAPI()@my_awesome_api.get("/")
async def root():return {"message": "Hello World"}
自定义 my_awesome_api
对象,将 app
改为 my_awesome_api
,对应的装饰器也改为 @my_awesome_api
。
三 自定义 uvicorn 启动
将代码放入 main.py
文件中,然后可以像下面这样运行 uvicorn
:
$ uvicorn main:my_awesome_api --reloadINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
如果代码放入了 chapter01.py
文件中,可以像下面运行 uvicorn
:
$ uvicorn chapter01:my_awesome_api --reload
四 术语
1 路径
路径:也称为端点或路由,指的是 URL 中从第一个 /
起的部分。例如,URL https://example.com/items/foo
的路径是 /items/foo
。开发 API 时,路径用于分离 关注点 和 资源 。
2 操作
操作:指的是一种 HTTP 方法。
常见操作 | 少见操作 |
---|---|
POST | OPTIONS |
GET | HEAD |
PUT | PATCH |
DELETE | TRACE |
在 HTTP 协议中,可以使用上述方法之一(或多种)与每个路径进行通信。在开发 API 时,可以使用特定的 HTTP 方法执行特定行为。
HTTP 方法 | 特定行为 |
---|---|
POST | 创建数据 |
GET | 读取数据 |
PUT | 更新数据 |
DELETE | 删除数据 |
五 定义一个路径操作装饰器
from fastapi import FastAPIapp = FastAPI()# 一个路径操作装饰器
@app.get("/")
async def root():return {"message": "Hello World"}
@app.get("/")
告诉 FastAPI 下方的函数负责处理如下访问请求:
- 请求路径为
/
- 使用
GET
操作
1 装饰器
@decorator
语法在 Python
中被称为 装饰器。装饰器 告诉 FastAPI 下方的函数对应着 路径 /
加上 GET
操作,是一个 路径操作装饰器。FastAPI 中的装饰器对应 HTTP 方法如下:
路径操作装饰器 | HTTP 方法 |
---|---|
@app.get() | GET |
@app.post() | POST |
@app.put() | PUT |
@app.delete() | DELETE |
@app.options() | OPTIONS |
@app.head() | HEAD |
@app.patch() | PATCH |
@app.trace() | TRACE |
FastAPI 没有强制要求操作有任何特定含义,可以随意使用任何操作(HTTP 方法),但一般在实际项目中习惯使用 GET/POST。
2 解释说明
这是一个路径操作函数:
- 路径:
/
- 操作:
GET
- 函数:位于装饰器下方的函数
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
这是一个 Python 函数,每当 FastAPI 接收一个使用 GET
方法访问 URL /
的请求时,该函数会被调用。在这个例子中,这是一个 async
函数,也可以将其定义成常规函数而不使用 async def
:
from fastapi import FastAPIapp = FastAPI()@app.get("/")
def root():return {"message": "Hello World"}
有关 async def
和 def
的更多信息可以查看 官方文档 。
六 返回内容
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
可以返回 dict
、list
,或者单个值,如 str
、int
等。当前示例返回 JSON
。
七 完整代码示例
from fastapi import FastAPI# 启动命令:uvicorn chapter01:app --reload
app = FastAPI()@app.get("/")
async def root():return {"message": "Hello World! app"}# 启动命令:uvicorn chapter01:my_awesome_api --reload
my_awesome_api = FastAPI()@my_awesome_api.get("/")
async def root():return {"message": "Hello World!my_awesome_api"}
八 源码地址
详情见:GitHub FastApiProj
引用: FastAPI 文档