让我们一起走向未来
🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐
FastAPI特点:现代,快速,高性能。前后端分离的WebAPI接口开发。
FastAPI是建立在Starlette 和 Pydantic的基础上的。
Starlette和Pydantic
Starlette 和 Pydantic 是 Python 中用于构建网络应用和数据验证的两个非常流行的库。
Starlette 是一个轻量级的 ASGI(异步服务器网关接口)框架/工具包,它非常适合于构建异步的 Web 服务。Starlette 的特点包括:
- 轻量级且低复杂度的 HTTP Web 框架。
- 支持 WebSocket。
- 支持进程内后台任务。
- 支持启动和关闭事件。
- 内置测试客户端,基于
httpx
。 - 支持 CORS、GZip、静态文件、流式响应。
- 支持会话和 Cookie。
- 代码库完全类型注解,拥有 100% 的测试覆盖率。
- 与
asyncio
和trio
后端兼容。 - 性能优异,在独立基准测试中表现良好。
Pydantic 是一个数据验证库,它使用 Python 类型注解来定义数据模型,并提供强大的数据验证功能。Pydantic 的主要特点包括:
- 由类型提示驱动,模式验证和序列化由类型注释控制。
- 速度快,核心验证逻辑用 Rust 编写,是 Python 中最快的数据验证库之一。
- 能够生成 JSON 模式,便于与其他工具集成。
- 支持严格模式和宽松模式,数据不进行转换或在适当的情况下尝试将数据强制转换为正确类型。
- 支持数据类、TypedDicts 等多种标准库类型。
- 允许自定义验证器和序列化器,以多种方式处理数据。
- 拥有庞大的生态系统,包括 FastAPI、huggingface 等多个流行库。
- 经过实战考验,每月下载量超过 70M 次,被 FAANG 公司和纳斯达克 25 家最大公司中的 20 家使用。
简而言之,Starlette 提供了一个轻量级且功能丰富的框架来构建异步 Web 服务,而 Pydantic 则提供了一个强大的数据验证工具,确保数据的一致性和有效性。
Http协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式、超媒体信息系统的网络协议。它是万维网(World Wide Web)上应用最广泛的协议之一,用于定义客户端(比如浏览器)和服务器之间请求和响应的传输格式和规则。
HTTP 协议的主要特点包括:
- 无状态性:HTTP 协议本身是无状态的,这意味着每个请求都是独立的,服务器不会保存之前请求的状态信息。
- 请求-响应模型:HTTP 通信是基于请求和响应的模型。客户端发送一个请求到服务器,服务器处理请求并返回一个响应。
- 简单快速:HTTP 协议的设计简单,使得客户端和服务器之间的通信快速且高效。
- 灵活:HTTP 支持多种类型的数据传输,包括文本、图片、视频等超媒体类型。
- 可靠传输:虽然 HTTP 本身是无状态的,但它通常运行在可靠的传输层协议(如 TCP)之上,确保数据的可靠传输。
- 应用层协议:HTTP 是一个应用层协议,它定义了客户端和服务器之间的通信规则。
HTTP 请求和响应的基本结构包括:
- 请求(Request):
- 方法(如 GET、POST、PUT、DELETE 等)
- 请求 URI(统一资源标识符)
- HTTP 版本
- 请求头(Headers)
- 请求体(Body,可选)
- 响应(Response):
- HTTP 版本
- 状态码(如 200 OK、404 Not Found 等)
- 状态消息
- 响应头(Headers)
- 响应体(Body,可选)
HTTP/1.1 是目前最广泛使用的 HTTP 协议版本,而 HTTP/2 是其改进版本,引入了头部压缩、多路复用等特性以提高性能。HTTP/3 是最新的主要版本,它基于 QUIC 协议,进一步优化了性能和安全性。
区分Url地址和参数
URL(Uniform Resource Locator,统一资源定位符)是用于在互联网上定位资源的唯一地址。一个完整的URL通常由以下几个部分组成:
- 协议:指定使用的协议,如
http
、https
、ftp
等。 - 域名:服务器的域名,如
www.example.com
。 - 端口:服务器监听的端口号(可选,默认为协议的默认端口,如HTTP的80和HTTPS的443)。
- 路径:资源在服务器上的路径,如
/path/to/resource
。 - 查询字符串(Query String):附加在URL末尾的参数,用于传递额外信息给服务器,通常以
?
开始,参数之间用&
分隔,如?key1=value1&key2=value2
。 - 锚点(Anchor):用于指向页面内特定位置的标识符,以
#
开始,如#section1
。
下面是一个包含参数的URL的例子:
https://www.example.com/path/to/resource?param1=value1¶m2=value2#section1
在这个例子中:
-
https
是协议。 -
www.example.com
是域名。 -
/path/to/resource
是路径。 -
param1=value1¶m2=value2
是查询字符串,其中param1
和param2
是参数的键,value1
和value2
是对应的值。 -
#section1
是锚点。
参数是查询字符串中的一部分,用于传递额外的请求信息给服务器。它们通常以键值对的形式出现,多个参数之间用&
分隔。参数可以用于:
- 搜索条件:如在搜索引擎中输入的关键词。
- 表单提交:在Web表单中填写的数据。
- 状态信息:传递一些状态信息或用户偏好设置。
区分URL地址和参数的关键在于:
- URL地址是资源的定位信息,包括协议、域名、端口、路径和锚点。
- 参数是附加在URL末尾的查询字符串,用于传递额外的信息给服务器。