自底向上分析FastAPI框架
WebSocket
WebSocket是Web浏览器和Web服务器之间的全双工通信标准。它支持由服务器向客户端推送数据的推送功能,并且能够减少通信量。为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次握手的步骤。
ASGI
ASGI的全称是异步服务器网关接口,它是一个介于Web服务器和Web应用程序之间的标准接口。与ASGI相关的另一个重要概念是WSGI,也就是Web服务器网关接口。WSGI是基于HTTP协议模式开发的,不支持WebSocket。ASGI是WSGI的扩展,在原有基础上增加了许多新的特性,比如支持HTTP2,WebSocket和异步通信等。
Starlette
Starlette是一个支持ASGI的异步框架,它可以用于构建Web应用程序。在以下示例中,我们通过Starlette类构建了一个应用(app),并注册了主页(homepage)的路由。
1 | from starlette.applications import Starlette |
Uvicorn
Uvicorn是一个快速的ASGI服务器,基于uvloop(用于处理事件循环)和httptools(用于处理HTTP协议)构建。通过它,前端可以与后台的应用程序进行交互。Uvicorn要求应用程序实现一个包含三个参数(连接信息scope,接收信道receive,发送信道send)的函数或示例。
1 | async def app(scope, receive, send): |
可以通过以下命令运行Uvicorn:
1 | uvicorn main:app |
Pydantic
Pydantic是一个Python库。用户只需定义一个类,用Python的类型提示标注其字段,Pydantic就会自动处理验证和序列化。
在以下示例中,我们将输入数据传递给一个Order类,如果数据无效,Pydantic将自动抛出一个详细的错误,指出哪个字段无效以及为什么。
1 | from pydantic import BaseModel, Field |
我们还可以将order序列化为字典或者JSON格式。
1 | order_dict = order.dict() |
FastAPI
FastAPI是一个基于Starlette和Pydantic的API框架,它具有非常高的性能,并且包含数据处理的功能。此外,它可以自动生成交互式API文档,便于开发和测试。