目录
[URL 各部分详细拆解](#URL 各部分详细拆解)
[1、协议部分:网络请求的 "传输规则"](#1、协议部分:网络请求的 “传输规则”)
[2、 域名部分:网络请求的 "目标地址"](#2、 域名部分:网络请求的 “目标地址”)
[3、端口部分:网络请求的 "服务入口"](#3、端口部分:网络请求的 “服务入口”)
[4、页面 / 方法部分:网络请求的 "具体资源"](#4、页面 / 方法部分:网络请求的 “具体资源”)
[5、参数部分:网络请求的 "数据传递"](#5、参数部分:网络请求的 “数据传递”)
[总结:URL 结构核心逻辑](#总结:URL 结构核心逻辑)
1、FastAPI概述与安装
fastapi官方文档: https://fastapi.tiangolo.com/zh/
fastapi官方源码: https://github.com/tiangolo/fastapi
1.1、前置概念介绍
1、接口相关概念
- 接口: 就是客户端 (比如浏览器、手机 App)和服务器 (你的代码)沟通的**"桥梁"** 。比如你在 App 上查天气,App 会通过天气接口向服务器要数据,服务器返回结果。
- **API:**即应用程序编程接口,是一种特殊的接口,它是为了让开发者能够更方便地调用其他软件或系统的功能而提供的一组工具和规范。
- FastAPI: 一个 Python 库,帮你快速写「接口」的工具 ------ 不用自己处理复杂的网络通信,只需要写简单的 Python 函数,它就自动帮你变成能被别人访问的接口。
- 服务器(uvicorn): 运行你代码的程序,它会 "监听" 客户端的请求,收到请求后调用你的函数,再把结果返回给客户端。
**比喻:**你(写 FastAPI 代码)是餐厅厨师,服务器(uvicorn)是餐厅服务员,客户端(浏览器)是顾客。顾客(客户端)通过服务员(服务器)点单(发请求),你(厨师)按单做菜(执行函数),服务员再把菜(结果)送给顾客。
2、网页url的组成
该部分将以一个实际URL为例,拆解网络请求中 URL 的核心组成部分,帮助新手快速理解网络请求的基础逻辑。
示例 URL:
https://www.baidu.com/wd?username=admin&userpass=admin123需要说明的是,存在网页解析失败的情况(系统报错:"网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试"),但这并不影响我们对 URL 基础结构的学习 ------ 即使网页无法正常访问,URL 本身的组成规则依然是网络请求的核心基础。
URL 各部分详细拆解
URL(Uniform Resource Locator,统一资源定位符)是网络请求的 "地址导航",每一部分都有明确的功能分工,下面结合实例逐一解析:
1、协议部分:网络请求的 "传输规则"
**定义:**协议是客户端与服务器之间数据传输的约定,决定了数据如何安全、准确地传递。
实例解析: 示例 URL 的协议部分为https,属于加密协议(相比 http 更安全,数据传输过程会经过 Unicode 编码加密),是目前主流的网络传输协议。
**核心作用:**告诉浏览器 / 客户端 "用什么规则" 与目标服务器通信。
2、 域名部分:网络请求的 "目标地址"
定义: 域名是服务器的 "网络别名" ,对应服务器的 IP 地址,方便用户记忆(无需记住复杂的 IP 数字)。
实例解析: URL 中 // 后面的部分为域名 www.baidu.com,它对应着百度服务器的真实 IP 地址。
补充知识点: 电脑默认的本地主机地址是 127.0.0.1(也叫 "回环地址") ,常用于本地开发测试,相当于本地服务器的 "默认域名"。
**核心作用:**定位网络请求的目标服务器,让客户端知道 "要找哪台服务器"。
3、端口部分:网络请求的 "服务入口"
定义: 端口是同一服务器上不同网络服务的 "专属入口" ,一台服务器可同时提供多个服务(如网页服务、数据库服务),通过端口区分不同服务。
**位置规则:**端口紧跟在域名 / IP 地址之后,用冒号 : 分隔,格式为 域名:端口 或 IP:端口(如 www.example.com:8080、127.0.0.1:3000)。
**实例补充:**示例 URL 中未显式写出端口,因为常用协议有默认端口 ------http 协议默认端口为 80,https 协议默认端口为 443,当使用默认端口时可省略不写(示例实际访问的是 www.baidu.com:443)。
**补充示例:**本地开发时常见的端口如 8000(FastAPI 默认端口)、3000(前端项目默认端口),例如 127.0.0.1:8000/login 表示访问本地服务器 8000 端口的登录服务。
**核心作用:**指定服务器上的 "目标服务",让客户端知道 "要对接服务器的哪个功能入口"。
4、页面 / 方法部分:网络请求的 "具体资源"
**定义:**这部分对应服务器上的具体资源路径,前端开发中称为 "页面",后端开发中称为 "接口方法",用于指定请求服务器上的哪个功能 / 页面。
**实例解析:**URL 中 / 后面、? 前面的部分为 wd,属于搜索相关的页面 / 方法(可理解为百度的搜索功能入口)。
**类比示例:**常见的后端接口路径如 /home/login(登录功能方法)、/user/info(用户信息查询方法),与 wd 的作用逻辑一致 ------ 都是指定服务器的具体功能。
**核心作用:**明确请求的 "具体资源 / 功能",让服务器知道 "要执行什么操作"。
5、参数部分:网络请求的 "数据传递"
**定义:**参数是客户端向服务器传递的关键信息,以 "键值对" 形式存在,用于辅助服务器执行具体功能(如登录验证、条件查询等)。
语法规则:
- 参数以**?**开头,标志着参数部分的开始;
- 多个参数用**&**(并且符号)拼接,形成参数列表;
- 每个参数的格式为 "参数名 = 参数值"(如 username=admin)。
实例解析: 示例 URL 的参数部分为 username=admin&userpass=admin123,包含两个参数:
- username=admin:用户名参数(值为 admin);
- userpass=admin123:密码参数(值为 admin123)。
**核心作用:**向服务器传递 "操作所需的数据",让服务器根据参数执行对应逻辑(如验证用户名密码是否正确)。
总结:URL 结构核心逻辑
一个完整的 URL 本质是 "按规则拼接的网络请求指令",包含端口后的完整逻辑关系可概括为:
[协议]://[目标服务器域名]:[端口]/[具体功能页面/方法]?[参数1=值1]&[参数2=值2]各部分的核心分工可简化为:
- **协议:**用什么规则通信;
- **域名:**找哪台服务器;
- **端口:**对接服务器的哪个服务入口;
- **页面 / 方法:**执行什么功能;
- **参数:**传递什么数据。
通过这个结构,客户端能清晰地向服务器传递完整请求指令,这也是网络请求能够正常运行的基础逻辑。
1.2、FastAPI简介与核心优势
FastAPI 是一款现代、快速(高性能)、轻量级的 Python Web 框架,专为构建 RESTful API 设计,自 2018 年 12 月发布首个版本以来,凭借易⽤性、速度与稳健性迅速获得开发者青睐。
它基于 Python 3.8+ 版本开发 ,依赖 Starlette(异步支持)和 Pydantic(数据验证) ,核心特性是深度整合Python 类型提示 ------ 既实现了严格的输入验证与优秀的代码提示,还能自动生成 Swagger UI、ReDoc 交互式 API 文档,大幅降低开发与维护成本。
选择 FastAPI 的核心原因可概括为:
- **性能卓越:**依托异步编程与 Starlette 底层支撑,处理 IO 密集型任务效率突出;
- **Pythonic 易用:**贴合 Python 自然语法,学习曲线平缓,开发体验流畅;
- **文档自动化:**无需额外编写,自动生成直观可测试的 API 文档,减少重复工作;
- **生态兼容:**无缝对接 Python 丰富生态,可便捷集成各类第三方库与工具。
1.3、安装FastAPI库和uvicorn库
打开终端(win + R)
输入cmd
可以通过以下命令查看python编译器的路径:
where python在终端中输入下面命令安装FastAPI
python编译器路径 -m pip install fastapi -i https://mirrors.aliyun.com/pypi/simple/另外我们还需要⼀个 ASGI 服务器,⽣产环境可以使⽤ Uvicorn 或者 Hypercorn(这里使用uvicorn)
python编译器路径 -m pip install "uvicorn[standard]" -i https://mirrors.aliyun.com/pypi/simple/
1.4、创建fastapi项目
安装完成后通过pycharm创建fastapi项目:
打开pycharm,新建项目:
创建好后如下图所示:
2、第一个fastapi程序
将以下代码写入main.py中,并且启动服务
python# 从 fastapi 模块中引入 FastAPI 类,这个类用于创建一个 FastAPI 应用实例 # FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API from fastapi import FastAPI # 创建一个 FastAPI 应用的实例,后续将使用这个实例来定义路由、中间件等 # 可以把 app 想象成整个 Web 应用的核心控制器,它负责接收和处理客户端的请求 app = FastAPI() # 使用 app.get 装饰器来定义一个 HTTP GET 请求的路由 # 这里的 "/" 是路由的路径,表示根路径,即当客户端访问应用的根 URL 时会触发这个路由 # 例如,如果应用运行在 http://localhost:8000,那么访问 http://localhost:8000/ 就会调用下面定义的函数 @app.get("/") # 定义一个处理根路径 GET 请求的函数,函数名为 read_root # 当客户端发送符合上述路由规则的请求时,FastAPI 会自动调用这个函数来处理请求 def read_root(): # 函数返回一个字典 {"Hello": "World"} # 在 FastAPI 中,当返回一个字典时,它会自动将其转换为 JSON 格式的数据并返回给客户端 # 所以客户端会收到一个 JSON 响应,内容为 {"Hello": "World"} return {"Hello": "World"}
2.1、通过命令启动服务
python# 启动服务 # filename:py文件名(不含.py),app_name: FastAPI 应用的实例名 # 通过命令:uvicorn filename:app_name200:表示访问成功
python# 网络请求状态码(200、202、206、300、304、404、500) # 200:请求成功 # 2xx:成功 # 3xx:页面重定向(页面、资源重新加载、定位了) # 4xx:404 页面找不到 访问不了 找不到 # 5xx:内部服务器错误(服务器端的代码出现问题)现在你将read_root( )函数中的返回信息进行修改:
在刷新一下 http://127.0.0.1:8000/ 页面,会发现返回的json数据并没有更新,
这时只需要在终端中输入ctrl+c停止服务运行,在重启就行了。
在开发中每次修改代码都要重新启动服务,太麻烦了,通过在命令后加上reload参数(热重载)就不用重启服务,在修改代码后会启动服务,并自动重新加载内容。
命令:
pythonuvicorn filename:app_name --reload让我们尝试一下,将服务重新启动,在更改返回数据值
2.2、通过调试启动服务
python# 启动服务 # filename:py文件名,app_name: FastAPI 应用的实例名 # 1.通过命令在终端启动:uvicorn filename:app_name --reload # 2.通过调试:fastapi dev filename.py # 需要安装fastapi[standard]安装命令:
python编译器路径 -m pip install "fastapi[standard]" -i https://mirrors.aliyun.com/pypi/simple/通过该方法启动服务器,修改后内容也会更新。
2.3、通过py文件启动服务
python# 启动服务 # filename:py文件名,app_name: FastAPI 应用的实例名 # 1.通过命令在终端启动:uvicorn filename:app_name --reload # 2.通过调试:fastapi dev filename.py # 需要安装fastapi[standard] # 3.通过py运行
1、写法一
在main.py文件中加入下面代码:
pythonimport uvicorn if __name__ == '__main__': # 参数一:应用的实例名 # 参数二(host):ip地址 # 参数三(port):端口号 uvicorn.run(app, host="127.0.0.1", port=8000)和运行普通的python代码一样运行,结果如下。
每次修改代码都要重新运行。
2、写法二
在main.py文件中加入下面代码:
import uvicorn if __name__ == '__main__': # 参数一:filename:app_name (字符串) # 参数二(host):ip地址 # 参数三(port):端口号 # 参数四(reload):修改代码重新加载 uvicorn.run("main:app", host="127.0.0.1", port=8000,reload=True)在终端中输入:
python filename.py
3、FastAPI文档服务
FastAPI 提供了内置的交互式 API ⽂档,使开发者能够轻松了解和测试 API 的各个端点。这个⽂档是⾃动⽣成的,基于 OpenAPI 规范,⽀持 Swagger UI 和 ReDoc 两种交互式界⾯。 通过 FastAPI 的交互式 API ⽂档,开发者能够更轻松地理解和使⽤ API,提⾼开发效率,在运⾏ FastAPI 应⽤ 时,Uvicorn 同时启动了交互式 API ⽂档服务。
3.1、docs
在url后加上**/docs**
例如: http://127.0.0.1:8000/docs
3.2、redoc
在url后加上**/redoc**
例如: http://127.0.0.1:8000/redoc
3.3、交互式文档的优势
- 实时更新: 交互式⽂档会实时更新,反映出应⽤代码的最新更改。
- 自动验证: 输⼊参数的类型和格式会得到⾃动验证,降低了错误的可能性。
- **便于测试:**可以直接在⽂档中进⾏ API 请求测试,避免使⽤其他⼯具。























