FastAPI:重燃Python Web开发的火花(一)

前言

Python在Web开发中面临着哪些挑战,又该如何克服这些挑战呢?在本文中,我们将探讨FastAPI框架如何帮助我们解决这些问题,重燃Python Web开发的火花。

Python Web开发的短板

  1. 性能挑战:相较于C/C++,Java等语言,Python的性能表现较弱,这使得它在处理大型、高并发的Web应用方面可能并非首选。
  2. 多线程支持不佳:由于Python的全局解释器锁(GIL)的存在,使得Python在多线程处理上并不理想。
  3. 运行时错误:Python是动态类型语言,很多错误只有在运行时才能被发现,这对Web开发来说是个隐患。
  4. 缺乏成熟的异步库:尽管Python 3已经引入了原生的异步I/O支持,但与Node.js等相比,其成熟的异步库仍然较少。
  5. 部署过程较为繁琐:相对于PHP、Java等语言,Python的Web应用部署过程更加复杂,这无疑增加了开发的难度。

以上都是Python Web开发的一些短板,但是随着技术的发展,如FastAPI框架的出现,可以有效的解决Python Web开发中的一些问题。

1. FastAPI简介

FastAPI 是一个现代、快速(高性能)的 web 框架,用于构建 APIs,基于 Python 3.6 类型提示以及 Starlette 和 Pydantic 的强大的性能。FastAPI 对 Python Web 开发的短板进行了以下改进:

  1. 高性能:FastAPI 是一个高性能框架,只比 NodeJS 和 Go 稍慢,这在很大程度上解决了 Python 在 Web 开发中的性能问题。
  2. 易于编写异步代码:FastAPI 完全支持异步编程,并且可以与 Starlette(一个轻量级 ASGI 框架/工具集)一起使用,这使得在 Python 中编写高性能的异步代码变得更加容易。
  3. 减少运行时错误:FastAPI 利用 Python 3.6+ 的类型提示,可以通过编辑器和工具的支持,在代码开发阶段就检测出大部分错误,而不必等到运行时。
  4. 自动化 API 文档:FastAPI 自动为你的 API 生成交互式 API 文档,这在开发和调试过程中非常有用。
  5. 易于部署:FastAPI 可以轻松与 Docker 配合使用,使得部署变得非常简单。

因此,FastAPI 在很大程度上改善了 Python Web 开发的一些短板。

2. 环境准备

2.1 安装FastAPI

安装FastAPI相当简单,只需要使用Python的包管理器pip。在命令行或终端中,输入以下命令:

复制代码
pip install fastapi

这个命令会下载并安装FastAPI。

2.2 安装Uvicorn

FastAPI是异步的,所以还需要一个ASGI服务器,Uvicorn是目前最快的ASGI服务器之一,我们可以安装它:

复制代码
pip install uvicorn

3. 构建一个基础的FastAPI应用程序

3.1 编写程序

在main.py文件中输入以下代码:

python 复制代码
from fastapi import FastAPI

app = FastAPI(title='FastAPI接口文档', description='Fastapi接口文档', version="2.5.0", )


@app.get("/api/login", summary='登录', description='实现登录功能', tags=['登录'])
def login():
    return {"Hello": "World"}


@app.get("/api/login_out", summary='登出', description='实现登出功能', tags=['登出'])
def login_out():
    return {"Hello": "World"}


@app.get("/three/{params}", summary='测试', description='实现测试的功能', tags=['测试'])
def test(params: str = None):
    return {"Hello": params}

了解FastAPI程序结构:

第一步,导入FastAPI

javascript 复制代码
from fastapi import FastAPI

第二步,创建一个app实例

ini 复制代码
app = FastAPI()

第三步,编写一个 路径操作装饰器

kotlin 复制代码
@app.get("/")

3.2 测试无参数情况

3.3 测试有参数情况

如图可见我们输入的参数,被返回了

4. FastAPI 请求参数

4.1 GET请求参数

GET方式的参数有两种,一种是路径参数,一种是查询参数。

路径参数: 在FastAPI中,路径参数是指在URL路径中的一部分,通常用于指定资源的唯一标识符。可以通过在路径操作函数的参数中定义同名的变量来声明路径参数。

python 复制代码
from fastapi import FastAPI

app = FastAPI()

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

在这个例子中,item_id就是一个路径参数。当你访问如/items/5这样的URL时,item_id的值就会被设置为5,FastAPI会自动识别并解析路径参数,无需进行任何额外的配置。此外,FastAPI还支持路径参数的类型注解,可以通过类型注解来指定路径参数的类型,FastAPI会自动进行类型检查和转换。

查询参数: 在FastAPI中,查询参数是指URL中跟在问号后面的键值对,通常用于提供非必要的额外信息。可以通过在路径操作函数的参数中定义默认值来声明查询参数。

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

在这个例子中,skip和limit就是查询参数,我们指定了skip和limit的类型为int,所以如果访问如/items/?skip=foo&limit=10这样的URL,FastAPI会返回一个明确的错误,告诉你skip的值必须是整数,当你访问如/items/?skip=20&limit=10这样的URL时,skip的值就会被设置为20,limit的值就会被设置为10,FastAPI会自动识别并解析查询参数,无需进行任何额外的配置。

4.2 请求体参数

不使用 Pydantic的栗子:

python 复制代码
from fastapi import FastAPI
import uvicorn

app = FastAPI()


@app.post("/items")
async def read_item(item: dict):
    return {"item": item}

用 postman 发起请求,选 JSON 格式,因为接收的是 dict,所以 FastAPI 会自动将 JSON 字符串转换为 dict

使用 Pydantic的栗子:

python 复制代码
from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    age: Optional[int] = None
    gender: str
    hobby: str = None


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

参数指定为 Pydantic 模型后,FastAPI将请求体识别为 JSON 字符串,验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息,item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示

5 运行应用

运行命令: uvicorn main:app --reload

注意:运行命令app前面那个是文件位置,要以实际的文件名为准

vbnet 复制代码
uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

6 FastAPI API文档

FastAPI文档形式:交互式API文档、备用API文档

6.1 交互式API文档

在浏览器中请求 http://127.0.0.1:8000/docs ,显示交互式API文档, 自动交互式 API 文档(由 Swagger UI 提供,Swagger UI是一个非常流行的API文档生成工具,它可以生成交互式的、易于理解的API文档),如图:

此外,还可以通过在FastAPI应用对象上设置.title, .description 和 .version 属性来配置API的整体描述信息。这些信息将会显示在自动生成的API文档页面的顶部。

此时还可以单击某个具体的API,然后单击Try it out,然后填写参数,并单击Execute按钮来执行。

6.2 备用API文档

在浏览器中请求 http://127.0.0.1:8000/redoc ,显示备用API文档,备用的自动交互式文档(由 ReDoc 提供),如图:

总结:本篇文章介绍了FastAPI的基础部分,总的来说,FastAPI是一个功能强大、易用、高效的Web开发框架,无论你是Python新手,还是有经验的开发者,FastAPI都能帮助你更高效、更便捷地构建出高性能的Web应用。

参考:

1.FastAPI官网 fastapi.tiangolo.com/zh/

最后

FastAPI作为Python Web开发新的利器,已经吸引了大量的开发者的关注。让我们一起探索和学习,用FastAPI构建出更好的Web应用,重燃Python Web开发的火花!

相关推荐
song_ly0016 天前
深入理解软件测试覆盖率:从概念到实践
笔记·学习·测试
试着10 天前
【AI面试准备】掌握常规的性能、自动化等测试技术,并在工作中熟练应用
面试·职场和发展·自动化·测试
waves浪游11 天前
论坛系统测试报告
测试工具·测试用例·bug·测试
灰色人生qwer12 天前
使用JMeter 编写的测试计划的多个线程组如何生成独立的线程组报告
jmeter·测试
.格子衫.12 天前
powershell批处理——io校验
测试·powershell
试着12 天前
【AI面试准备】TensorFlow与PyTorch构建缺陷预测模型
人工智能·pytorch·面试·tensorflow·测试
waves浪游13 天前
博客系统测试报告
测试工具·测试用例·bug·测试
智云软件测评服务15 天前
数字化时代下,软件测试中的渗透测试是如何保障安全的?
渗透·测试·漏洞
试着16 天前
【AI面试准备】XMind拆解业务场景识别AI赋能点
人工智能·面试·测试·xmind
waves浪游17 天前
性能测试工具篇
测试工具·测试用例·bug·测试