一、FastAPI框架

1.FastAPI的优势

FastAPI在性能方面效率极高,测试表明其性能指标可以和Go和Node.js等高性能语言的框架处于同一水平。同时他运行速度也是很快的,它允许框架充分利用async和await关键字实现异步I/O,从而合理的防止cpu资源的浪费。

2、FastAPI的三大基石: Starlette,Pydantic,Uvicorn

FastAPI并非独立的巨大框架,而是 Starlette和Pydantic这俩大高性能库的继承与封装,并使用Uvicorn作为其运行容器。

Starlette:基石

FastAPI本身就是Starlette的一个子类,它继承了Starlette的所有核心ASGI特性。Starlette所提供的底层能力,保证了FastAPI能够在一个高度并发的环境中稳定运行。

Pydantic :数据验证与类型转换

Pydantic是 FastAPI处理数据的核心引擎。它负责根据Python类型提示,实现输入数据的自动验证(Validation)、类型强制转换(Coercion)和序列化(Serialization)。通过定义继承自 pydantic.BaseModel 的类,Pydantic确保了进入应用业务逻辑的数据是有效且符合预期的

Uvicorn:ASGl服务器

Uvicorn是用于运行FastAPI应用程序的高性能 ASGI 服务器。在开发过程中,通常使用 fastapi dev main.py 或 uvicorn main:app --reload 命令启动服务。然而,在架构考量上,必须区分开发环境和生产环境的服务器配置。

二、路由(协议 +域名+端口号+请求资源)

web路由指的就是用户把用户请求的URL映射大后端对应的处理逻辑(函数/方法/控制器)的过程。

示例:http://127.0.0.1:8000/hello/python,这里就是http(协议)+127.0.0.1(域名)

+端口号(8000)+请求资源(hello/python)

FastAPI的路由定义基于 Python 的装饰器模式,使用 @app.get(), @app.post() 等装饰器将 HTTP 方法与特定的路径操作函数关联起来。   @app.get("路径")

不同的HTTP方法有着不同的语义

  • GET 方法用于请求数据的检索 ,例如在网站查找自己的历史记录@app.get();
  • POST 方法则用于提交新数据,通常是为了创建新的资源,例如用户在web上创建网页用户 @app.post() ;
  • PUT、DELETE 和 PATCH 则分别用于资源的完全替换、删除或部分更新,例如对个人信息的更改 @app.put()。
  • 在设计API的时候,必须提前考虑web前端需要做的是什么。

示例:

这里就是一个简单路由实现业务逻辑的示例。

三、APIRouter模块化路由

在FastAPI中组织路由,通常有两种主流方式:

  1. 直接在主应用实例上定义路由,适合简单场景;

  2. 使用 APIRouter 模块化地组织路由,这在大型项目中更高效。下面这个表格汇总了它们的主要特点和适用场景:

特性直接应用路由APIRouter 模块化路由
适用场景简单应用,路由数量少中大型项目,需要分模块
代码结构所有路由集中在主文件路由按模块拆分,结构清晰
可维护性低,不易维护高,易于维护和扩展
团队协作差,容易产生冲突好,不同开发者负责不同模块
前缀/Tags需手动为每个路由添加可在路由器级别统一设置 prefix 和 tags

通常在项目规模比较大的情况下,都会使用APIRouter将路由进行分模块管理。

通常在使用APIRouter,会先创建他的实例,并为模块设置参数,并且定义一个路由处理函数

然后导入路由,在main函数中,实例化fastapi对象,在进行路由注册

运行:打印消息message:hello world

四、请求参数

通常客户端会发来一个Request请求也就是http+请求内容,给我们服务器,也就是FastAPI,我们会返回有一个Response相应。

这里我们可以借用pychram的http工具进行模拟网站发送的GET请求,返回hello world

下面做一些简单的传入理由的关键字介绍,可以帮你更好的理解

请求体

他是客户端向服务器发送大量结构化数据的最主要方式,通常用于 POST、PUT 或 PATCH 请求 。

接下来介绍一下Pydantic BaseModel 的核心作用

在进行请求体数据解析提取时,需要使用Pydantic进行数据获取和验证

我们需要定义一个类继承Pydantic.BaseModel,在里面定义想要使用的字段,在定义完继承类后,我们就可以把他看成一种类型,下图使用的是Idem类型,FastAPI就可以识别这是一个请求体参数,就会进行解析,对传入数据进行校验。

      注意:在写post请求时,在Accept下面一定要空一行,不然可能无法识别。

 Header和Cookie

除了上述传输之外,FastAPI还允许从HTTP协议的其他部分提取数据,但是这里就需要使用fastapi的一些特定的函数进行标记。

                  例如:Header的标记就是用X-Token来接收的

                             Cookie的标记是用 session_id接收的

五、响应参数

还有一些简单的相应参数,我就不做一一描述了,给大家简单展示一下,下面有图片相应和HTML文件相应,这里注意,由于是开发者自己学习,没有跟前端交互,所以我们需要手动导入图片搭配pycharm中。下图还有很多相应,开发者可以自己学习。

响应类型用途示例
JSONResponse默认响应,返回JSON数据return {"key": "value"}
HTMLResponse返回HTML内容return HTMLResponse(html_content)
PlainTextResponse返回纯文本return PlainTextResponse("text")
FileResponse返回文件下载return FileResponse(path)
StreamingResponse流式响应生成器函数返回数据
RedirectResponse重定向return RedirectResponse(url)

下面简单介绍一下,我们可以写错误状态码,通过status_code关键字可以使用

我们在常见的服务器中,通常不会出现报错的情况,因为我们设置了错误捕获,不然出现错误,就会导致服务器崩溃,所有用户都无法访问,这是我们不能接受的,下面为大家介绍一些,异常捕获

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐