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

server/2025/1/22 17:53:37/

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.ppmy.cn/server/160524.html

相关文章

招生管理|基于SprinBoot的招生管理系统系统设计与实现(源码+数据库+文档)

招生管理目录 基于SprinBootvue的招生管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 前台 后台 教师权限 学生权限: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#xf…

七.网络模型

最小(支撑)树问题 最小部分树求解: 破圈法:任取一圈,去掉圈中最长边,直到无圈; 加边法:取图G的n个孤立点{v1,v2,…, vn }作为一个支撑图,从最短…

Golang的图形编程应用案例分析与技术深入

Golang的图形编程应用案例分析与技术深入 一、Golang在图形编程中的应用介绍 作为一种高效、简洁的编程语言,近年来在图形编程领域也逐渐展露头角。其并发性能优势和丰富的标准库使得它成为了一个越来越受欢迎的选择。 与传统的图形编程语言相比,Golang具…

Azure面试

文章目录 项目地址一、Azure Storage1. What are the benefits of Azure Storage? 二、汇总 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、Azure Storage 1. What are the bene…

npm介绍

npm(Node Package Manager)是 Node.js 的默认包管理工具,用于管理 JavaScript 和 Node.js 项目的依赖关系。它既是一个包管理工具,又是一个在线仓库,开发者可以通过它分享和下载开源的 JavaScript 库和工具。npm 是世界…

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2.换掉付费的Event Hubs)

前情回顾: 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)-CSDN博客 前边的方案是挺好的,但 Azure Event Hubs 是付费服务,我这里只是一个获取日志进行必要的分析,并且不要求实…

Lsky-Pro在线图片搭建教程(Docker部署方式)

Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。如果你需要一个在线图床程序,那么这个开源项目可以帮助到你,部署流程非常简单。本章教程记录如何部署Lsky-Pro。 一、拉取镜像 docker pull halcyonazure/lsky-pro-docke…

AF3 AttentionPairBias类源码解读

AttentionPairBias 是 AlphaFold3 的一个注意力机制模块,设计用于实现全自注意力(Full Self-Attention)并结合成对表示的偏置(Pair Bias)。它在 AlphaFold3 的架构中发挥重要作用,特别是在处理蛋白质序列和空间对称性相关的任务时。 源代码: class AttentionPairBias(…