使用 FastAPI 构建现代化的高性能 Web API

原文链接:mp.weixin.qq.com/s/PJhqLRiZl...

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。它基于 Python 3.6+ 类型提示,旨在提供快速开发、简洁设计和高性能。本文将引导你了解 FastAPI 的基础知识,包括环境搭建、基本概念、路由创建、请求处理,以及响应格式化等,提供一个全面的入门指南。

FastAPI 概述

FastAPI 是一个用于构建 API 的现代 Python Web 框架。它兼容 OpenAPI 和 JSON Schema,提供了自动数据验证、序列化和 API 文档等功能。

核心特点

  • 高性能:与 NodeJS 和 Go 相当。
  • 快速编码:减少约 40% 的开发时间。
  • 自动生成文档:支持 Swagger UI 和 ReDoc。
  • 基于标准:基于 OpenAPI 和 JSON Schema。

环境搭建

首先,需要安装 FastAPI 和一个 ASGI 服务器,如 Uvicorn。

bash 复制代码
pip install fastapi[all]

创建第一个 FastAPI 应用

基本示例

创建一个基本的 FastAPI 应用:

python 复制代码
from fastapi import FastAPI

app = FastAPI()

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

运行应用

使用 Uvicorn 运行应用:

bash 复制代码
uvicorn main:app --reload

访问 http://127.0.0.1:8000 可以看到响应。

路由和参数

FastAPI 使用 Python 类型提示定义路径参数和查询参数。

路径参数示例

python 复制代码
@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

查询参数示例

python 复制代码
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

请求体和数据模型

FastAPI 使用 Pydantic 库来处理数据模型。

请求体定义

python 复制代码
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
async def create_item(item: Item):
    return item

响应处理

FastAPI 允许你定义响应模型和状态码。

响应模型

python 复制代码
from fastapi.responses import JSONResponse

@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
    ...
    return JSONResponse(content=item)

异常处理

FastAPI 提供了异常处理机制。

python 复制代码
from fastapi import HTTPException

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

中间件和依赖注入

FastAPI 支持中间件和依赖注入,以增强应用功能。

python 复制代码
from fastapi import Depends

def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
    return commons

部署

FastAPI 应用可以部署在多种服务器和平台上,如 Gunicorn、Docker 等。

使用 Gunicorn 部署

bash 复制代码
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app

总结

FastAPI 以其高性能、快速开发和易用性在 Python Web 框架中脱颖而出。通过本文的介绍,你应该能够掌握 FastAPI 的基本用法,并开始构建自己的 Web API。随着学习的深入,你还可以探索 FastAPI 更多高级功能,以构建更复杂和强大的应用。

相关推荐
刘马想放假2 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
2601_967987373 小时前
python判断变量名不要调用任何函数实现
python·函数·语法·判断·变量名
卷无止境4 小时前
SALib敏感性分析的python库学习笔记
后端·python
duansamve5 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
特立独行的猫A5 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
特立独行的猫A5 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
duansamve6 小时前
详解Flask中Session和Cookie
python·flask
威哥爱编程7 小时前
模拟面试智能体开发实战 04:面试聊到哪算哪?用状态机把整场面试编排起来
python·agent·harmonyos
威哥爱编程7 小时前
模拟面试智能体开发实战 03:AI 面试官太客气?人设 Prompt 让它像个真考官
python·agent·harmonyos
量化分析码农7 小时前
股票数据接口返回字段逐项解析:从在线验证到 Python 数据校验
python