【入门篇】 最快的 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 从应用程序接收请求并将其发送到服务器。然后,服务器处理请求并将数据发送回应用程序。然后,应用程序解释数据并将其呈现给用户。
什么是 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 在整体性能方面优于所有其他框架。
待完成
数据库结合
前后端不分离的情况下的静态文件和模板处理
前后端分离情况下的多模块结构
真实项目案例
项目开发、代码讲解、疑难问题、环境搭建 请联系:gaoyue_13
微信搜一搜:逮猫大兄弟。感谢支持~
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。