ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

为什么 FastAPI 是 Python Web 开发的未来

2023-07-16 19:31:49  阅读:282  来源: 互联网

标签:FastAPI Python cookie


FastAPI 到底是什么?

FastAPI是一个现代的,快速的(因此得名)Web框架,用于使用Python构建API。它建立在Starlette框架之上,严重依赖Python的类型注释来提供API请求和响应的快速有效的验证,序列化和文档。

FastAPI的主要功能是什么?

  • 快速性能:FastAPI 使用高性能库(如 Pydantic 和 Uvicorn)构建,以实现令人难以置信的速度并处理高流量负载。
  • 简单易用:FastAPI 带有一个简单直观的 API,易于学习和使用。
  • 易于验证和序列化:FastAPI 使用 Python 的类型提示来自动验证 API 请求和响应,以及自动序列化和反序列化与 JSON 中的数据,从而消除了样板代码。
  • 内置文档:FastAPI 自动生成交互式 API 文档,让开发者可以快速轻松地探索和测试 API。
  • ASGI支持:FastAPI建立在ASGI(异步服务器网关接口)之上,允许它利用异步编程的强大功能来实现更快的性能。
  • 依赖注入:FastAPI 利用 Python 的依赖注入系统自动将依赖注入到 API 端点和其他组件中,从而轻松构建复杂的应用程序。

让我们更详细地了解其中的一些。

易于验证和序列化

在我看来,这是FastAPI最伟大的部分。这里的关键是FastAPI使用内置的Python语法来实现这些事情。下面是一个示例:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

这是一个非常简单的 API 端点,它将item_id作为输入并以 JSON 格式返回。有趣的是,Python的提示用于验证输入。因此,如果您像这样调用此端点:

“/项目/测试”

它将返回验证错误:

{
    “detail”: [ { “
loc”: [
 
 “path”, “item_id” ], “msg”: “value 不是有效的整数”,


 “type”: “type_error.integer” 

        }
    ]
}

但是,如果您需要比这更复杂的东西怎么办?

皮丹蒂克

使用 Python 类型注释进行数据验证和设置管理。pydantic 在运行时强制实施类型提示,并在数据无效时提供用户友好的错误。定义数据应该如何用于纯规范的 Python;用pydantic验证它。

以下是在 FastAPI 应用程序中使用 Pydantic 的示例:

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Union[str, None] = None
    price: float
    tax: Union[float, None] = None


app = FastAPI()


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

仍然适用于内置类型提示。以及Pydantic模型本身使用类型提示来描述字段。如果你只使用像Django和Flask这样的框架,这应该已经让你感到惊讶了。

让我们看看使用 Django REST Framework 的序列化程序来实现相同结果的示例:

class CommentSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=200)
    description = serializers.CharField(max_length=500, required=False)
    price = serializers.FloatField()
    tax = serializer.FloatField(required=False)

这是DRF序列化程序的一个简单示例,当然,它正在工作,但是Pydantic的版本是一种更干净,更pythonic的方式。

序列化更简单,我们可以从路径操作函数返回 Pydantic 模型的一个实例,它将自动与所有嵌套模型一起序列化。

自动文档

FastAPI 将根据您的类型提示、Pydantic 模型和路径操作函数的参数生成 OpenAPI 模式,并将显示在交互式 API 文档中。

 

FastAPI 提供了大量机会根据您的需求修改和配置文档。您可以使用干净的语法添加描述、注释、标题、示例以及您能想到的所有内容。

编辑器支持

此功能是对上面列出的要点的影响。

 

编辑器支持乍一看可能听起来很无用,但相信我 - 这是大型项目的实时保存器。当你的项目在增长时,你应该把你的数据模型与业务逻辑和端点分开(我希望你这样做),所以编辑器已经知道你的模型具有哪些类型的属性,所以你将避免很多愚蠢的错误编码。人们倾向于低估这一点,但是当您将一个小错误推送到生产中时,它可以成为真实的事情,这可以通过编辑器突出显示来避免。

依赖注入

在软件工程中,依赖注入是一种设计模式,其中对象或函数接收它所依赖的其他对象或函数。依赖注入是一种控制反转的形式,旨在分离构造对象和使用它们的关注点,从而导致松散耦合的程序。

依赖注入是其他编程语言中广泛使用的设计模式,但在 Python 中则不是。它来自完整的OOP语言,如Java和.NET,所以你可能不熟悉它,但你怎么看?它也是救命稻草。

让我们看看它在 FastAPI 中是如何工作的。

要实现 DI,我们需要有一个“可靠的”,在 FastAPI 中,它是每个函数(同步或异步),可以采用路径操作函数可以采用的所有相同参数。

from typing import Union

from fastapi import Depends, FastAPI

app = FastAPI()


async def common_parameters(
    q: Union[str, None] = 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


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

在这里,common_parameters是可靠和read_items,read_users是家属

在执行read_items“代码之前,将执行common_parameters。

您可以在一个函数中使用多个依赖项,并且 reliableable 也可以具有依赖项,因此基本上您可以构建它们的树以满足您的需求。

对我来说,有趣的是,您根本不需要担心可靠接收的参数。FastAPI 将自动负责将正确的参数传递给您的函数,即使父级无法访问它。请参阅此示例:

from typing import Union

from fastapi import Depends, FastAPI, Cookie

app = FastAPI()


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


def check_cookies(ads_id: Union[str, None] = Cookie(default=None)):
    return {"ads_id": ads_id}


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

read_items函数对 cookie 本身一无所知,因为我们没有指定该参数,但可靠的函数仍然能够访问该 cookie。这也是 FastAPI 的一个非常强项,因为它有助于保持代码更加干净和专业,并且仍然遵循尽可能使用 python 内置语法的规则。

干净的代码

以上所有观点本身都很棒,但最重要的部分是它们正在引导(如果不是强制)清理代码习惯。我见过 python 开发人员甚至不知道什么是类型注释以及为什么我们需要它们,我见过很多应用程序有很多重复的代码。FastAPI 强制要求编写类型提示、声明依赖项并遵循 OOP 设计模式,这有助于创建出色的代码结构并保持代码干净。这就是为什么它现在如此受欢迎,我觉得它将继续存在。

标签:FastAPI,Python,cookie
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有