前端Python应用指南(五)用FastAPI快速构建高性能API

《写给前端的python应用指南》系列:

在前几篇博文中,我们分别介绍了Flask和Django,讲解了它们在构建Web应用方面的优势和应用场景。今天,我们将探讨另一个Python Web框架------FastAPI,它以其高性能、易用性和现代化的特性迅速成为构建API的热门选择。本文将引导你使用FastAPI快速构建一个高性能的API,帮助你更好地理解FastAPI的核心特性及其优势。

一、FastAPI简介

FastAPI是一个现代的、快速(高性能)的Web框架,用于构建API。它基于Python 3.6+的类型提示,具有自动生成API文档的功能,同时还具有非常出色的性能,接近于Go和Node.js等编程语言的表现。FastAPI的设计灵感来自于Flask和Pydantic,并利用了Python的类型提示和异步编程模型,使得开发者可以用更少的代码实现更高效、更安全、更易于维护的API。

1.1 FastAPI的核心特点
  • 高性能:FastAPI基于Starlette和Uvicorn构建,充分利用了异步编程模型,因此在处理高并发请求时具有非常优秀的性能。
  • 自动化文档生成:FastAPI内置了对OpenAPI和JSON Schema的支持,自动生成交互式的API文档,可以通过Swagger UI或者ReDoc来查看。
  • 类型提示和验证:FastAPI利用Python类型提示自动生成请求和响应的验证和文档,从而减少了手动验证的工作量。
  • 异步支持:FastAPI原生支持异步API处理,能够在IO密集型任务中显著提高性能。
  • 简单易用:通过类型注解和现代化的语法,使得FastAPI的学习曲线较低,开发者可以快速上手。

二、FastAPI与Flask、Django对比

  • 与Flask对比:Flask是一个轻量级的Web框架,专注于灵活性和扩展性,而FastAPI在灵活性的基础上,提供了更强的性能、类型安全和自动化文档生成。Flask适合中小型项目,FastAPI则适用于对性能要求较高的API服务。

  • 与Django对比:Django是一个全栈框架,通常用于构建复杂的Web应用,而FastAPI更专注于API构建,特别是在性能和开发效率上具有优势。Django适用于大型Web应用,FastAPI适用于构建高效、可扩展的API服务。

三、快速上手FastAPI

3.1 安装FastAPI和Uvicorn

首先,确保你已安装了Python 3.6或更高版本。接着,你可以通过以下命令安装FastAPI和Uvicorn。

bash 复制代码
pip install fastapi uvicorn
  • FastAPI:Web框架本身。
  • Uvicorn:ASGI服务器,用于运行FastAPI应用。
3.2 创建一个简单的API

让我们创建一个简单的FastAPI应用,包含一个基本的GET请求和POST请求。

  1. 创建一个名为main.py的文件,并添加以下代码:
python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel

# 创建FastAPI实例
app = FastAPI()

# 定义一个请求体模型
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

# 定义一个GET请求
@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

# 定义一个POST请求
@app.post("/items/")
def create_item(item: Item):
    return {"name": item.name, "price": item.price, "tax": item.tax}
3.3 解释代码
  • FastAPI实例app = FastAPI() 创建了一个FastAPI应用实例。
  • 请求体模型Item类使用Pydantic库来定义API请求体的模型。Pydantic支持数据验证和自动生成OpenAPI文档。
    • namedescriptionpricetax分别表示商品的名称、描述、价格和税费。
  • 路由处理函数
    • read_root:该函数响应GET请求,并返回一条简单的JSON消息。
    • create_item:该函数响应POST请求,接收一个Item对象作为请求体,并返回商品的名称和价格。
3.4 运行应用

运行FastAPI应用非常简单,只需在终端中执行以下命令:

bash 复制代码
uvicorn main:app --reload
  • main: 指的是文件名(不需要加.py后缀)。
  • app: 指的是FastAPI实例。
  • --reload: 启用自动重载功能,适合开发时使用。

访问 http://127.0.0.1:8000,你将看到FastAPI自动生成的文档界面,支持Swagger UI和ReDoc。

3.5 交互式文档

FastAPI自动生成的API文档非常直观,访问 http://127.0.0.1:8000/docs 你将看到Swagger UI界面,它展示了所有可用的API端点、请求方式、请求参数以及响应结构。

如果你更喜欢ReDoc风格的文档,可以访问 http://127.0.0.1:8000/redoc

四、更多功能

FastAPI不仅仅是构建简单API那么简单,它提供了很多强大的功能,帮助开发者在构建生产级别API时提高效率和可靠性。

4.1 请求参数验证

FastAPI支持从查询参数、路径参数和请求体中自动提取数据,并进行类型验证。

例如,以下是通过查询参数传递数据:

python 复制代码
@app.get("/items/")
def read_item(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

访问路径 /items/?skip=5&limit=20 时,FastAPI会自动验证并解析查询参数。

4.2 依赖注入

FastAPI的依赖注入系统使得你可以轻松地复用代码,处理认证、数据库连接、配置等功能。通过Depends,你可以将某些逻辑抽象为可重用的组件。

python 复制代码
from fastapi import Depends

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

@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
    return commons
4.3 异步支持

FastAPI原生支持异步编程,能够显著提高IO密集型任务(如数据库查询、外部API请求等)的性能。

python 复制代码
import asyncio

@app.get("/items/")
async def read_items():
    await asyncio.sleep(1)
    return {"message": "This was a slow response"}
4.4 安全和认证

FastAPI内置了对OAuth2、JWT、API密钥等认证方式的支持,确保你的API具备高安全性。

例如,使用OAuth2认证:

python 复制代码
from fastapi import Security
from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/items/")
def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

五、性能优势

FastAPI的一个显著特点是其卓越的性能,接近Go和Node.js的速度。FastAPI利用异步编程、Pydantic验证和Starlette的高效路由等特性,在处理大量并发请求时具有显著的优势。根据官方基准测试,FastAPI的性能在所有Python Web框架中位居前列。

5.1 性能测试

你可以通过uvicorngunicorn组合来运行FastAPI应用,进一步提高并发性能。以下是一个使用gunicorn来部署FastAPI应用的命令:

bash 复制代码
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
  • -w 4:表示启动4个工作进程。
  • -k uvicorn.workers.UvicornWorker:指定使用Uvicorn的工作进程来运行FastAPI应用。

六、总结

通过本篇博文,我们快速入门了FastAPI,并使用它构建了一个简单的API。FastAPI不仅高效、易用,而且能够自动生成API文档,简化了开发过程中的许多繁琐任务。它的异步支持和类型验证功能使得它非常适合构建高性能、可维护的API服务。

FastAPI的优势在于其高性能和开发效率,非常适合处理高并发、高请求量的应用场景。如果你正在寻找一个现代、快速且功能强大的Python API框架,FastAPI无疑是一个非常不错的选择。

希望通过本篇教程,你能够了解FastAPI的基本功能,并在你的项目中实现更高效、更稳定的API构建。

相关推荐
计算机相关知识分享1 小时前
python基础知识(二)
开发语言·python
Python私教1 小时前
PyPika:Python SQL 查询构建器
开发语言·python·sql
AI研习星球3 小时前
数据分析-50-客户价值分析-用Python实现RFM模型
python·机器学习·自然语言处理·数据挖掘·数据分析·算法学习·论文辅导
机器懒得学习3 小时前
打造智能化恶意软件检测桌面系统:从数据分析到一键报告生成
人工智能·python·算法·数据挖掘
tony3653 小时前
optuna和 lightgbm
pytorch·python·深度学习
测试老哥4 小时前
功能测试和接口测试
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·接口测试
我走过的路你也许在走4 小时前
python装饰器学习案例
开发语言·python·学习
a栋栋栋4 小时前
apifox
java·前端·javascript
我的运维人生4 小时前
Python在数据处理与分析中的高效应用:以金融数据为例
开发语言·python·金融·运维开发·技术共享
请叫我飞哥@5 小时前
HTML 标签页(Tabs)详细讲解
前端·html