FastAPI和Uvicorn


一、FastAPI和Uvicorn简介:框架 vs 服务器

  • FastAPI:是一个现代、高性能的 Web 框架,用于快速构建 API 接口。它基于 Python 的类型提示(type hints),能自动生成 API 文档,支持异步编程,并且兼容 OpenAPI 和 JSON Schema 规范。

  • Uvicorn:是一个基于 asyncio 的 ASGI 服务器,负责接收和处理 HTTP 请求,将请求转发给 Web 应用,并将应用的响应返回给客户端。它本身不处理业务逻辑,只是提供运行 Web 应用的环境。

二、为什么需要它们一起使用?

Web 应用的运行需要两个核心部分:

  1. 应用程序:定义业务逻辑(如路由、数据处理等)—— 这是 FastAPI 的工作。
  2. 服务器:负责网络通信(监听端口、接收请求、返回响应)—— 这是 Uvicorn 的工作。

类比来说:

  • FastAPI 像“餐厅的厨师”,负责制作食物(处理业务逻辑)。
  • Uvicorn 像“餐厅的服务员”,负责接待客人、传递订单和食物(处理网络通信)。

三、快速上手:FastAPI + Uvicorn 实战

1. 安装依赖

pip install fastapi uvicorn

2. 编写一个简单的 FastAPI 应用

创建文件 main.py

from fastapi import FastAPI

# 创建 FastAPI 应用实例
app = FastAPI()

# 定义路由:当访问根路径 "/" 时,执行下面的函数
@app.get("/")
async def read_root():
    return {"message": "Hello, FastAPI + Uvicorn!"}

# 定义带参数的路由
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "query": q}

3. 用 Uvicorn 运行应用

在命令行执行:

uvicorn main:app --reload
  • main:app:指定运行 main.py 文件中的 app 实例(FastAPI 创建的应用)。
  • --reload:开发模式下自动重载,修改代码后无需手动重启服务器。

启动后,访问 http://127.0.0.1:8000 即可看到返回的 JSON 数据{"message":"Hello, FastAPI + Uvicorn!"}。
访问 http://127.0.0.1:8000/items/456,会返回 {"item_id": 456, "query": null}。
访问 http://127.0.0.1:8000/items/456?q=hello,会返回 {"item_id": 456, "query": "hello"}。特殊符合?分隔了 URL 的路径部分和查询参数部分,被 FastAPI 自动解析并传递给函数的 q 参数。

四、FastAPI 好处多多

  1. 自动生成 API 文档

    • 访问 http://127.0.0.1:8000/docs 可查看交互式文档(基于 Swagger UI)。
    • 访问 http://127.0.0.1:8000/redoc 可查看另一种风格的文档(基于 ReDoc)。
  2. 类型提示与自动校验

    • 如上面代码中的 item_id: int,FastAPI 会自动校验参数类型,不符合时返回清晰的错误信息。
  3. 异步支持

    • 函数前加 async 即可定义异步接口,配合 Uvicorn 的异步能力,性能大幅提升。
  4. 轻量且强大

    • 兼容 Starlette(另一个异步框架),可直接使用其功能(如中间件、模板等)。

五、Uvicorn 的作用

  1. 作为 ASGI 服务器

    • 支持异步 Web 应用(ASGI 规范),比传统的 WSGI 服务器(如 Gunicorn)更适合处理高并发请求。
  2. 处理网络层细节

    • 监听指定的 IP 和端口(默认 127.0.0.1:8000)。
    • 解析 HTTP 请求,将其转换为应用可处理的格式(如 scopereceivesend)。
    • 将应用返回的响应转换为 HTTP 协议格式,发送给客户端。
  3. 生产环境配置

    • --workers 指定工作进程数(如 --workers 4),利用多核 CPU 提高性能。
    • --host 0.0.0.0 允许外部设备访问(如部署到服务器时)。

六、总结

  • FastAPI 负责定义 API 接口、处理业务逻辑、数据校验等“应用层”工作。
  • Uvicorn 负责监听端口、接收请求、转发给应用、返回响应等“网络层”工作。
  • 两者结合使用,既能快速开发高性能 API,又能可靠地运行在生产环境中。
posted @ 2025-08-21 16:16  Filament  阅读(9)  评论(0)    收藏  举报
返回顶端