当前位置: 首页 > article >正文

FastAPI教程:快速构建高性能API

FastAPI教程:快速构建高性能API

 

介绍

 

FastAPI是一个现代的、快速的(高性能)Web框架,用于构建APIs,基于标准的Python类型提示。它非常适合用于构建高效、易于维护的API服务。FastAPI支持自动生成文档,输入数据验证和异步编程,且性能接近Go和Node.js。

 

本教程目标

 

本教程将带领你构建一个简单的FastAPI应用,包括:

 

1. 创建FastAPI项目

 

 

2. 定义和处理API端点

 

 

3. 输入数据验证与自动文档

 

 

4. 异步支持

 

 

5. 部署FastAPI应用

 

 

 

环境准备

 

安装FastAPI与Uvicorn

 

在开始之前,我们需要安装FastAPI和Uvicorn。Uvicorn是一个ASGI服务器,通常与FastAPI一起使用,提供高性能的异步Web服务。

 

pip install fastapi uvicorn

 

目录结构

 

我们建议的项目目录结构如下:

 

/fastapi-example

    ├── app/

    │ ├── main.py

    │ ├── models.py

    │ └── schemas.py

    ├── requirements.txt

    └── README.md

 

创建第一个FastAPI应用

 

1. 编写 main.py

 

在app/main.py中,创建FastAPI应用,并定义一个简单的路由:

 

from fastapi import FastAPI

 

# 创建FastAPI实例

app = FastAPI()

 

# 路由:根路径(/)

@app.get("/")

async def read_root():

    return {"message": "Hello, World!"}

 

解释:

 

FastAPI():创建一个FastAPI实例。

 

@app.get("/"):定义GET请求的路由,根路径返回一个简单的JSON响应。

 

async def read_root():使用异步函数来处理请求。

 

 

2. 运行应用

 

可以通过Uvicorn启动应用:

 

uvicorn app.main:app --reload

 

app.main:app表示从app/main.py中加载FastAPI实例。

 

--reload参数使应用在代码修改后自动重载。

 

 

3. 访问应用

 

打开浏览器并访问 http://127.0.0.1:8000/,你应该看到如下输出:

 

{"message": "Hello, World!"}

 

路由与请求

 

FastAPI支持多种HTTP方法,包括GET、POST、PUT、DELETE等。我们来继续扩展API,增加一个POST请求,处理JSON数据。

 

1. 定义一个Pydantic模型

 

Pydantic是FastAPI用于数据验证和序列化的工具。我们可以定义一个Pydantic模型来确保API接收的数据格式正确。

 

在app/schemas.py中:

 

from pydantic import BaseModel

 

# 创建Pydantic模型

class Item(BaseModel):

    name: str

    description: str = None

    price: float

    tax: float = None

 

解释:

 

BaseModel是所有Pydantic模型的基类。

 

name, description, price, tax是模型的字段,类型是Python的数据类型,FastAPI会根据这些类型自动进行数据验证。

 

 

2. 添加POST路由

 

在app/main.py中,定义一个POST路由,接收Item模型的数据:

 

from fastapi import FastAPI

from app.schemas import Item

 

app = FastAPI()

 

@app.post("/items/")

async def create_item(item: Item):

    return {"name": item.name, "price": item.price}

 

解释:

 

@app.post("/items/"):定义POST请求,路径为/items/。

 

item: Item:FastAPI会自动解析请求体中的JSON数据,并将其映射到Item模型。

 

 

3. 测试POST请求

 

使用工具如Postman或cURL,向 http://127.0.0.1:8000/items/ 发送一个POST请求:

 

{

    "name": "Laptop",

    "description": "A high-end laptop",

    "price": 1200.50,

    "tax": 100.00

}

 

响应应该是:

 

{

    "name": "Laptop",

    "price": 1200.5

}

 

自动生成文档

 

FastAPI自动生成API文档并提供两个界面:

 

1. Swagger UI:默认在/docs路径下提供。

 

 

2. ReDoc:默认在/redoc路径下提供。

 

 

 

你可以访问:

 

Swagger UI

 

ReDoc

 

 

异步支持

 

FastAPI支持异步路由函数,可以提高处理并发请求的性能。在FastAPI中,异步函数由async def声明,结合异步数据库查询或其他IO操作,能够大幅提升应用的吞吐量。

 

@app.get("/items/{item_id}")

async def read_item(item_id: int):

    # 模拟异步数据库查询

    item = await fake_db_query(item_id)

    return {"item": item}

 

在实际应用中,可以将数据库操作、文件处理等I/O密集型任务实现为异步操作,从而提升性能。

 

请求与响应模型

 

FastAPI允许你为请求体、响应体及查询参数使用模型。这些模型不仅能进行数据验证,还能自动生成API文档。

 

1. 自定义响应模型

 

你可以自定义响应体的结构,保证返回的数据符合预期格式:

 

from fastapi import FastAPI

from pydantic import BaseModel

 

class Item(BaseModel):

    name: str

    price: float

 

class ResponseModel(BaseModel):

    success: bool

    data: Item

 

@app.post("/create_item/", response_model=ResponseModel)

async def create_item(item: Item):

    return ResponseModel(success=True, data=item)

 

2. 查询参数模型

 

FastAPI允许你通过定义模型来处理查询参数,使其更清晰易读:

 

from fastapi import FastAPI, Query

 

@app.get("/items/")

async def get_items(skip: int = Query(0, alias="page", ge=0), limit: int = Query(10, le=100)):

    return {"skip": skip, "limit": limit}

 

在上面的代码中,我们使用了Query类来定义查询参数。ge表示参数的最小值,le表示最大值。

 

部署FastAPI应用

 

使用Docker部署

 

FastAPI可以与Docker一起使用,方便部署到任何环境。以下是一个简单的Dockerfile示例:

 

# 使用官方Python镜像

FROM python:3.9

 

# 设置工作目录

WORKDIR /app

 

# 安装依赖

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

 

# 复制项目代码

COPY . .

 

# 运行应用

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

 

构建和运行Docker镜像

 

docker build -t fastapi-example .

docker run -d -p 8000:8000 fastapi-example

 

现在,FastAPI应用就可以通过http://localhost:8000访问。

 

总结

 

FastAPI是一个功能强大、易于使用的框架,提供了强类型的验证、自动生成文档和高效的异步支持。通过本教程,我们创建了一个简单的FastAPI应用,并演示了如何处理GET和POST请求,进行数据验证,并实现API文档的自动生成。你还可以使用Docker将应用部署到生产环境中。

 

希望这篇教程能够帮助你快速上手FastAPI,并开始构建高效的API服务!

 

 


http://www.kler.cn/a/513233.html

相关文章:

  • Java 的初认识(一)
  • 基于python的博客系统设计与实现
  • k8s集群换IP
  • 直驱式风电储能制氢仿真模型matlab/simulink
  • 【useCallback Hook】在多次渲染中缓存组件中的函数,避免重复创建函数
  • 解决leetcode第3426题所有安放棋子方案的曼哈顿距离
  • 可免费使用的电子画册制作平台
  • AutoSAR CP RTE 规范核心内容简介以及BswScheduler工作原理解析
  • PostgreSQL插件pg_repack介绍和简单使用【2】
  • 基于Python django的音乐用户偏好分析及可视化系统设计与实现
  • 2024年博客之星主题创作|从零到一:我的技术成长与创作之路
  • 嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础
  • 如何解决 Apache Shutdown Unexpectedly 错误 ?
  • 人工智能AI 与 机器学习ML 的关键区别
  • element el-table合并单元格
  • 机器学习(5):支持向量机
  • CSS 溢出问题及解决方案:实用案例与技巧
  • 在 vscode + cmake + GNU 工具链的基础上配置 JLINK
  • web自动化-登录时滑块验证码报错解决方案
  • MongoDB数据库迁移
  • Linux -- HTTP 请求 与 响应 报文
  • 网络安全等级保护基本要求——等保二级
  • 可以自己部署的微博 Mastodon
  • 【优选算法】4----盛最多水的容器
  • Docker可视化管理工具Portainer
  • GFPGAN - 腾讯开源的图形修复算法修复算法