【入门篇】 最快的 Python web 框架之一,还不快试试

小Y工作室2023 2024-06-27 15:03:02 阅读 53

API(应用程序编程接口)是现代架构的支柱,因为它们允许应用程序模块化和解耦。这意味着我们可以快速轻松地构建应用程序,从而轻松维护和使用它们。

API 在机器学习中也非常重要,因为它们允许不同的应用程序共享数据并协同工作,从而节省时间和精力。在 Python 中构建 API 有许多不同的框架。在 Python 中创建 API 的一些最流行的框架是 Django、Flask 和 FastAPI。本文深入探讨了一个名为 FastAPI 的框架。

什么是 API?

API 代表应用程序编程接口。API 是一种软件中介,允许两个应用程序相互通信。当我我们在手机上使用应用程序时,该应用程序将连接到 Internet 并将数据发送到服务器。然后,服务器会处理数据并将其发送回手机。然后,您手机上的应用程序会解释数据并以可读的方式呈现给您。

API 就像餐厅的服务员。服务员接过您的订单并将其送到厨房。然后,厨房准备食物并将其送回服务员。然后服务员将食物端给您。

同样,API 从应用程序接收请求并将其发送到服务器。然后,服务器处理请求并将数据发送回应用程序。然后,应用程序解释数据并将其呈现给用户。

A simple API architecture design

什么是 FastAPI

FastAPI 是一个高性能的 Web 框架,用于使用基于标准 Python 类型提示的 Python 3.7+ 构建 API。它可以帮助开发人员快速高效地构建应用程序。FastAPI 建立在 Starlette Web 服务器之上,包括使构建 Web 应用程序更容易的功能,例如自动数据验证、错误处理和交互式 API 文档。

在本节中,我们将分别介绍所有这些功能。首先,让我们看一下 FastAPI 原始文档中指出的关键特性。

快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

高效编码:提高功能开发速度约 200% 至 300%。*

更少 bug:减少约 40% 的人为(开发者)导致错误。*

智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

简单:设计的易于使用和学习,阅读文档的时间更短。

简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

健壮:生产可用级别的代码。还有自动生成的交互式文档。

标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

安装 FastAPI

FastAPI 需要 Python 3.7+。可以使用pip安装它。需要安装 FastAPI 和 ASGI 服务器“uvicorn”。

# install fastapi

pip install fastapi

# install uvicorn

pip install uvicorn

创建简单的 API

让我们直接开始创建一个非常简单的玩具 API。我正在使用 Pycharm 来实现这一点,但您可以使用任何您喜欢的编辑器

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

def read_root():

return {"Hello": "World"}

@app.get("/items/{item_id}")

def read_item(item_id: int, q: Union[str, None] = None):

return {"item_id": item_id, "q": q}

现在使用命令行终端,使用以下命令运行此 API:

uvicorn main:app --reload

“main”是 Python 文件的名称,“app”是存储 FastAPI 类的变量。您可以随心所欲地命名它们。运行上述命令后,您将在终端上看到如下内容:

转到浏览器中的链接,如果您看到显示“Hello World”的页面,则 API 已启动并运行。

恭喜您构建了您的第一个 API

交互式 API 文档

FastAPI 使用 OpenAPI标准生成包含所有 API 的“架构”,用于定义 API。“模式”是对某物的定义或描述。不是实现它的代码,而只是一个抽象的描述。OpenAPI 模式是 FastAPI 中包含的两个交互式文档系统的支持。

要查看文档,只需将“/docs”添加到网址(“http://127.0.0.1:8000/docs”)。如果开发过springboot项目的同学对此一定不会陌生,此链接将显示自动交互式 API 文档。

单击右上角的“try it out”按钮可以测试 API

因为需要访问公网获取swagger依赖的js css等文件,可能会出现网络异常导致的页面无法正常显示,本文也提供了本地的方案

from fastapi.openapi.docs import (

get_swagger_ui_html,

get_swagger_ui_oauth2_redirect_html,

)

app.mount("/static", StaticFiles(directory="static"), name="static")

@app.get("/docs", include_in_schema=False)

async def custom_swagger_ui_html():

return get_swagger_ui_html(

openapi_url=app.openapi_url,

title=app.title + " - Swagger UI",

oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,

swagger_js_url="/static/swagger-ui-bundle.js",

swagger_css_url="/static/swagger-ui.css",

)

@app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False)

async def swagger_ui_redirect():

return get_swagger_ui_oauth2_redirect_html()

更高级的例子

在构建 API 时,“路径”定义请求的路由或端点。但是,我们在这里还必须做出一个选择,即“操作”。这里的“操作”一词是指 HTTP“方法”之一。通过使用这些所谓的“方法”中的一种(或多种),您可以与 HTTP 协议支持的多个路径中的每一个进行通信。通常按照restful风格,您将使用:

POST:创建数据。

GET:读取数据。

PUT:更新数据。

DELETE:删除数据。

以及其他一些高级的操作

FastAPI 支持所有 http 方法。

FastAPI 是基于 Python 类型提示构建的,这是该框架的另一个关键方面。Python 3.6 及更高版本支持类型提示。类型提示是一种特殊的语法,可以声明变量的类型。

通过声明变量的类型,编辑器和其他工具可以为您提供改进的帮助。让我们看一个高级示例。

from typing import List, Optional

from fastapi import FastAPI, HTTPException

from pydantic import BaseModel

app = FastAPI()

"""

create_item: 用于增加项目,接受一个 Item 对象作为请求体,并将其添加到模拟数据库中。

read_items: 用于查询列表,接受 skip 和 limit 查询参数,返回指定范围内的项目列表。

read_item: 用于查询详细,接受一个项目 ID,并返回该 ID 对应的项目详情。

update_item: 用于修改项目,接受一个项目 ID 和一个更新后的 Item 对象,并更新对应的项目信息。

delete_item: 用于删除项目,接受一个项目 ID,并删除对应的项目。

"""

# 模拟存储数据的字典

fake_items_db = []

# 请求体模型

class Item(BaseModel):

name: str

description: Optional[str] = None

price: float

tax: Optional[float] = None

# 增加项目

@app.post("/items/", response_model=Item)

async def create_item(item: Item):

fake_items_db.append(item)

return item

# 查询列表

@app.get("/items/", response_model=List[Item])

async def read_items(skip: int = 0, limit: int = 10):

return fake_items_db[skip: skip + limit]

# 查询详细

@app.get("/items/{item_id}", response_model=Item)

async def read_item(item_id: int):

if item_id < 0 or item_id >= len(fake_items_db):

raise HTTPException(status_code=404, detail="Item not found")

return fake_items_db[item_id]

# 修改项目

@app.put("/items/{item_id}", response_model=Item)

async def update_item(item_id: int, item: Item):

if item_id < 0 or item_id >= len(fake_items_db):

raise HTTPException(status_code=404, detail="Item not found")

fake_items_db[item_id] = item

return item

# 删除项目

@app.delete("/items/{item_id}", response_model=Item)

async def delete_item(item_id: int):

if item_id < 0 or item_id >= len(fake_items_db):

raise HTTPException(status_code=404, detail="Item not found")

deleted_item = fake_items_db.pop(item_id)

return deleted_item

FastAPI 与 Django 和 Flask 的比较

这三个框架都是 Python Web 框架,可用于开发 Web 应用程序。他们每个人都有自己的长处和短处。

Django 是一个功能齐全的框架,包括您入门所需的一切,包括内置的 ORM 和管理面板。对于初学者来说,它可能有点不知所措,但其全面的文档使其易于学习。

Flask 是一个轻量级且易于上手的微框架。它包含的功能不如 Django,但它非常适合简单的项目。

FastAPI 是一个新框架,旨在快速且易于使用。它包括自动数据验证和文档记录等功能。

django

flask

fastapi

社区

66K GitHub star

61K GitHub star

50K GitHub star

性能

Django 是巨大的。就性能而言,它不是最好的。

Flask 是一个微型 Web 框架。它比 Django 表现更好。

FastAPI 是最快的 Web 框架之一,具有原生异步支持,可提高框架的效率。

异步支持

是的

不。需要 Asyncio

FastAPI 提供原生异步支持。

易用性

Django 是巨大的,因此学习起来有点复杂。

Flask 易于学习且使用起来非常简单。

FastAPI 是这三者中最简单的。

交互式文档

非交互式

是(OpenAI、Redoc)

数据验证

是的

FastAPI 性能基准

最后附上一张测试图

根据 techempower 运行的测试结果,FastAPI 在整体性能方面优于所有其他框架。

API Performance benchmarks

待完成

数据库结合

前后端不分离的情况下的静态文件和模板处理

前后端分离情况下的多模块结构

真实项目案例


项目开发、代码讲解、疑难问题、环境搭建 请联系:gaoyue_13

微信搜一搜:逮猫大兄弟。感谢支持~



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。