使用 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 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
vx_dmxq2112 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
无垠的广袤2 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
艾莉丝努力练剑3 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
gCode Teacher 格码致知3 小时前
Python基础教学:如何拼接字符串?-由Deepseek产生
python
还债大湿兄3 小时前
阿里通义千问调用图像大模型生成轮动漫风格 python调用
开发语言·前端·python
blank@l3 小时前
python测开小工具--日志查询分析工具
python·python接口自动化测试基础·python测试开发·日志查询分析·日志分析统计查询·软件测试工具·argparse模块
hu_nil4 小时前
LLMOps-第十三周
python·vllm
空影星4 小时前
轻量日记神器RedNotebook,高效记录每一天
python·数据挖掘·数据分析·音视频
搬砖ing换来金砖4 小时前
Python入门-Task02
开发语言·python