当前位置: 首页 > article >正文

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

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

  • (一)快速构建 Web 服务器 - Flask vs Node.js 对比
  • (二)深入Flask:理解Flask的应用结构与模块化设计
  • (三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
  • (四)Django实战:创建一个简单的博客系统

在前几篇博文中,我们分别介绍了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。

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

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

  1. 创建一个名为main.py的文件,并添加以下代码:
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应用非常简单,只需在终端中执行以下命令:

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支持从查询参数、路径参数和请求体中自动提取数据,并进行类型验证。

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

@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,你可以将某些逻辑抽象为可重用的组件。

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请求等)的性能。

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认证:

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应用的命令:

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构建。


http://www.kler.cn/a/454636.html

相关文章:

  • SpringCloudAlibaba升级手册-nacos问题记录
  • 免费资源网站
  • 【c语言】简单的c程序设计
  • 多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真
  • 走进人工智能体
  • LabVIEW生物医学信号虚拟实验平台
  • 同步异步日志系统:设计模式
  • ubuntu 账号从文本中的1000,改成0,后五笔输入法等中文输入法不可用,如何改回来
  • 【Ubuntu 20.4安装截图软件 flameshot 】
  • 全面Kafka监控方案:从配置到指标
  • 【自由能系列(初级),论文解读】神经网络中,熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。
  • flask后端开发(11):User模型创建+注册页面模板渲染
  • 使用Python实现自动化文档生成工具:提升文档编写效率的利器
  • STM32F103RCT6学习之一:基本开发流程
  • FileLink为企业打造了一站式的跨网安全文件共享解决方案
  • Docker使用——国内Docker的安装办法
  • 前端面试题合集(一)——HTML/CSS/Javascript/ES6
  • Kubernetes Gateway API-2-跨命名空间路由
  • 鸿蒙Next自定义相机开发时,如何解决相机在全屏预览的时候,画面会有变形和拉伸?
  • 【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?
  • 【js】记录预览pdf文件
  • 如何从 0 到 1 ,打造全新一代分布式数据架构
  • Jenkins 命令行多线程并发下载制品包
  • PPT画图——如何设置导致图片为600dpi
  • 青岛市勘察测绘研究院携手云轴科技ZStack获评专有云典型案例
  • Qt工作总结02 <设置工具栏ToolBar>