使用 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 更多高级功能,以构建更复杂和强大的应用。

相关推荐
aloha_7893 分钟前
测试开发工程师面经准备(sxf)
java·python·leetcode·压力测试
Jonathan Star1 小时前
MediaPipe 在Python中实现人体运动识别,最常用且高效的方案是结合**姿态估计**(提取人体关键点)和**动作分类**(识别具体运动)
开发语言·python·分类
山顶听风1 小时前
分页条初始化
python
NewsMash2 小时前
PyTorch之父发离职长文,告别Meta
人工智能·pytorch·python
硅农深芯2 小时前
如何使用ptqt5实现进度条的动态显示
开发语言·python·qt
程序员杰哥2 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
今天没有盐2 小时前
Pandas完全指南:从Series到DataFrame,掌握数据分析核心技能
python·pycharm·编程语言
暴风鱼划水2 小时前
算法题(Python)数组篇 | 4.长度最小的子数组
python·算法·力扣
B站计算机毕业设计之家3 小时前
大数据python招聘数据分析预测系统 招聘数据平台 +爬虫+可视化 +django框架+vue框架 大数据技术✅
大数据·爬虫·python·机器学习·数据挖掘·数据分析