跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

FastAPI 高效构建 Web API 基础指南

FastAPI 是基于 Python 的高性能 Web 框架,用于快速构建 API 服务。 FastAPI 的基础搭建,包括使用 Uvicorn 运行项目、路由配置、参数处理(路径参数、查询参数、请求体参数)、响应类型设置及异常处理机制。通过 Pydantic 模型实现数据验证与响应格式化,支持自动生成交互式文档,适合构建高效的后端接口。

未来可期发布于 2026/2/5更新于 2026/10/247.1K 浏览
FastAPI 高效构建 Web API 基础指南

FastAPI 简介

FastAPI 是一个基于 Python 的高性能 Web 框架,专门用于快速构建 API 接口服务。

FastAPI 框架基础

使用 FastAPI 框架搭建 Web 服务

1. 创建项目
2. 运行项目

运行项目:

uvicorn main:app --reload

终端运行说明:

  • --reload:更改代码后自动重启服务器
3. 访问项目

访问 FastAPI 交互式文档(Swagger UI)。

路由

路由是 URL 地址和处理函数之间的映射关系,它决定了当用户访问某个特定网址时,服务器应该执行哪段代码来返回结果。

示例:

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.post("/add_book")
async def add_book(book: Book):
    return book

参数

同一段接口逻辑,根据参数不同返回不同的数据。参数就是客户端发送请求时附带的额外信息和指令,作用是让同一个接口能根据不同的输入,返回不同的输出,实现动态交互。

路径参数
URL 路径设置参数
@app.get("/user/{id}")
async def get_user(id: int):
    return {"id": id, "titleName": f"这是用户{id}"}
路径参数 - 类型注解 Path

FastAPI 允许为参数声明额外的信息和校验。

Path 参数说明
...必填
gt/ge大于/大于等于
lt/le小于/小于等于
description描述
min_length/max_length长度限制
from fastapi import FastAPI, Path

@app.get("/newsClassificationId/{id}")
async def get_news_classification_id(id: int = Path(..., ge=1, le=100, description="新闻分类 id")):
    return {"id": id, "titleName": f"新闻分类 id 为{id}"}
查询参数

声明的参数不是路径参数时,路径操作函数会把该参数自动解释为查询参数。

@app.get("/news/news_list")
async def get_news_list(skip: int, limit: int = 10):
    return {"skip": skip, "limit": limit}
查询参数 - 类型注解 Query
Query 参数说明
...必填
gt/ge大于/大于等于
lt/le小于/小于等于
description描述
min_length/max_length长度限制
from fastapi import FastAPI, Path, Query

@app.get("/book/query_list")
async def get_query_book_list(
    type: str = Query("Python 开发", min_length=5, max_length=255, description="图书分类名称"),
    price: int = Query(..., ge=50, le=100, description="图书价格")
):
    return {"type": f"图书分类名称为{type}", "price": f"价格为{price}"}
请求体参数

HTTP 请求的消息体(body)中。在 HTTP 协议中,一个完整的请求由三部分组成:① 请求行:包含方法、URL、协议版本;② 请求头:元数据信息(Content-Type、Authorization 等);③ 请求体:实际要发送的数据内容。

from pydantic import BaseModel

class Book(BaseModel):
    bookTitle: str
    author: str
    publishingHouse: str
    price: int

@app.post("/add_book")
async def add_book(book: Book):
    return book
请求体参数 - 类型注解 Field
Field 参数说明
...必填
gt/ge大于/大于等于
lt/le小于/小于等于
description描述
min_length/max_length长度限制

以图书信息为请求体参数设计 URL,要求响应结果包含图书名称、作者、出版社、价格,并且图书名称、作者、价格长度范围 2-20、2-10、0-100 内。

from pydantic import BaseModel, Field

class Book2(BaseModel):
    bookTitle: str = Field(..., min_length=2, max_length=20, description="书名")
    author: str = Field(min_length=2, max_length=10, description="作者")
    publishingHouse: str = Field(default="星空椰出版社", description="出版社")
    price: int = Field(..., gt=0, description="价格")

@app.post("/add_book2")
async def add_book(book: Book2):
    return book

请求与响应

响应类型
响应类型用途示例
JSONResponse默认响应,返回 JSON 数据return {"key": "value"}
HTMLResponse返回 HTML 内容return HTMLResponse(content)
PlainTextResponse返回纯文本return PlainTextResponse("text")
FileResponse返回文件下载return FileResponse(path)
StreamingResponse流式响应生成器函数返回数据
RedirectResponse重定向return RedirectResponse(url)
响应类型设置方式

装饰器中指定响应类:一般用于固定返回类型(HTML、纯文本等)。

from starlette.responses import HTMLResponse

@app.get("/html", response_class=HTMLResponse)
async def get_html():
    return "<h1>这是一级标题</h1>"

返回响应对象:用于文件下载、图片、流式响应。

from fastapi.responses import FileResponse

@app.get("/file")
async def get_file():
    file_path = "./files/1.jpeg"
    return FileResponse(file_path)
自定义响应数据格式

response_model 是路径操作装饰器(如 @app.get 或 @app.post)的关键参数,它通过一个 Pydantic 模型来严格定义和约束 API 端点的输出格式。

from pydantic import BaseModel

class News(BaseModel):
    id: int
    title: str
    content: str

@app.get("/news/{id}", response_model=News)
async def get_news(id: int):
    return {
        "id": id,
        "title": f"这是第{id}本书",
        "content": "这是一本好书"
    }

异常处理

操作接口出现异常,应使用 fastapi.HTTPException 来中断正常处理流程,并返回标准错误响应。

from fastapi import FastAPI, HTTPException

@app.get('/news/{id}')
async def get_news(id: int):
    id_list = [1, 2, 3, 4, 5, 6]
    if id not in id_list:
        raise HTTPException(status_code=404, detail="当前 id 不存在")
    return {"id": id}

目录

  1. FastAPI 简介
  2. FastAPI 框架基础
  3. 使用 FastAPI 框架搭建 Web 服务
  4. 1. 创建项目
  5. 2. 运行项目
  6. 3. 访问项目
  7. 路由
  8. 参数
  9. 路径参数
  10. URL 路径设置参数
  11. 路径参数 - 类型注解 Path
  12. 查询参数
  13. 查询参数 - 类型注解 Query
  14. 请求体参数
  15. 请求体参数 - 类型注解 Field
  16. 请求与响应
  17. 响应类型
  18. 响应类型设置方式
  19. 自定义响应数据格式
  20. 异常处理

更多推荐文章

查看全部
  • Kotlin 实现 WebView 动态注入 JS 修改 iframe 样式
  • 微信公众号文章开源导出工具 wechat-article-exporter 架构剖析
  • Python 办公自动化实战:批量处理 Excel、Word 和 PPT
  • iFlow Python SDK 文件系统使用指南
  • Python 在 Windows 系统上的安装与验证指南
  • Tomcat 安装、配置及 IDEA/Eclipse 集成实战指南
  • C# 字符串分割转换为整数数组或列表
  • KoboldAI 安装与配置指南
  • 大规模无人机检测数据集:11998 张图像支持 YOLOv8 等多格式训练
  • 服务端高并发分布式架构演进之路
  • 算法题精讲:模拟法在字符串与时间计算中的应用
  • LangChain 简明讲义:从 0 到 1 构建 LLM 应用程序
  • 基于 DeepSeek 的贪吃蛇游戏开发实战指南
  • VSCode 接入智谱 GLM-4 及自定义大模型配置方案
  • OpenCode 开源 AI 编程助手简介
  • 基于 React 与 MediaPipe 的数字塔罗占卜系统设计与实现
  • Spring Boot 3 优雅停机配置与实战
  • 二分查找算法:x 的平方根与搜索插入位置
  • 基于 OpenClaw 框架在 Discord 部署 AI 对话机器人实战指南
  • Claude Code + Figma:AI 辅助原型设计实战指南

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online