FastApi学习第一天:FastApi简介和Http协议_HTTP

让我们一起走向未来

🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐


FastApi学习第一天:FastApi简介和Http协议_学习_02

FastAPI特点:现代,快速,高性能。前后端分离的WebAPI接口开发。

FastAPI是建立在Starlette 和 Pydantic的基础上的。

Starlette和Pydantic

Starlette 和 Pydantic 是 Python 中用于构建网络应用和数据验证的两个非常流行的库。

FastApi学习第一天:FastApi简介和Http协议_学习_03

Starlette 是一个轻量级的 ASGI(异步服务器网关接口)框架/工具包,它非常适合于构建异步的 Web 服务。Starlette 的特点包括:

  • 轻量级且低复杂度的 HTTP Web 框架。
  • 支持 WebSocket。
  • 支持进程内后台任务。
  • 支持启动和关闭事件。
  • 内置测试客户端,基于 httpx
  • 支持 CORS、GZip、静态文件、流式响应。
  • 支持会话和 Cookie。
  • 代码库完全类型注解,拥有 100% 的测试覆盖率。
  • asynciotrio 后端兼容。
  • 性能优异,在独立基准测试中表现良好。

Pydantic 是一个数据验证库,它使用 Python 类型注解来定义数据模型,并提供强大的数据验证功能。Pydantic 的主要特点包括:

  • 由类型提示驱动,模式验证和序列化由类型注释控制。
  • 速度快,核心验证逻辑用 Rust 编写,是 Python 中最快的数据验证库之一。
  • 能够生成 JSON 模式,便于与其他工具集成。
  • 支持严格模式和宽松模式,数据不进行转换或在适当的情况下尝试将数据强制转换为正确类型。
  • 支持数据类、TypedDicts 等多种标准库类型。
  • 允许自定义验证器和序列化器,以多种方式处理数据。
  • 拥有庞大的生态系统,包括 FastAPI、huggingface 等多个流行库。
  • 经过实战考验,每月下载量超过 70M 次,被 FAANG 公司和纳斯达克 25 家最大公司中的 20 家使用。

简而言之,Starlette 提供了一个轻量级且功能丰富的框架来构建异步 Web 服务,而 Pydantic 则提供了一个强大的数据验证工具,确保数据的一致性和有效性。

Http协议

FastApi学习第一天:FastApi简介和Http协议_HTTP_04

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式、超媒体信息系统的网络协议。它是万维网(World Wide Web)上应用最广泛的协议之一,用于定义客户端(比如浏览器)和服务器之间请求和响应的传输格式和规则。

HTTP 协议的主要特点包括:

  1. 无状态性:HTTP 协议本身是无状态的,这意味着每个请求都是独立的,服务器不会保存之前请求的状态信息。
  2. 请求-响应模型:HTTP 通信是基于请求和响应的模型。客户端发送一个请求到服务器,服务器处理请求并返回一个响应。
  3. 简单快速:HTTP 协议的设计简单,使得客户端和服务器之间的通信快速且高效。
  4. 灵活:HTTP 支持多种类型的数据传输,包括文本、图片、视频等超媒体类型。
  5. 可靠传输:虽然 HTTP 本身是无状态的,但它通常运行在可靠的传输层协议(如 TCP)之上,确保数据的可靠传输。
  6. 应用层协议: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地址和参数

FastApi学习第一天:FastApi简介和Http协议_服务器_05

URL(Uniform Resource Locator,统一资源定位符)是用于在互联网上定位资源的唯一地址。一个完整的URL通常由以下几个部分组成:

  1. 协议:指定使用的协议,如httphttpsftp等。
  2. 域名:服务器的域名,如www.example.com
  3. 端口:服务器监听的端口号(可选,默认为协议的默认端口,如HTTP的80和HTTPS的443)。
  4. 路径:资源在服务器上的路径,如/path/to/resource
  5. 查询字符串(Query String):附加在URL末尾的参数,用于传递额外信息给服务器,通常以?开始,参数之间用&分隔,如?key1=value1&key2=value2
  6. 锚点(Anchor):用于指向页面内特定位置的标识符,以#开始,如#section1

下面是一个包含参数的URL的例子:

https://www.example.com/path/to/resource?param1=value1¶m2=value2#section1

在这个例子中:

  • https 是协议。
  • www.example.com 是域名。
  • /path/to/resource 是路径。
  • param1=value1&param2=value2 是查询字符串,其中param1param2是参数的键,value1value2是对应的值。
  • #section1 是锚点。

参数是查询字符串中的一部分,用于传递额外的请求信息给服务器。它们通常以键值对的形式出现,多个参数之间用&分隔。参数可以用于:

  • 搜索条件:如在搜索引擎中输入的关键词。
  • 表单提交:在Web表单中填写的数据。
  • 状态信息:传递一些状态信息或用户偏好设置。

区分URL地址和参数的关键在于:

  • URL地址是资源的定位信息,包括协议、域名、端口、路径和锚点。
  • 参数是附加在URL末尾的查询字符串,用于传递额外的信息给服务器。