一、FastAPI入门

目录

1、FastAPI概述与安装

1.1、前置概念介绍

1、接口相关概念

2、网页url的组成

[URL 各部分详细拆解](#URL 各部分详细拆解)

[1、协议部分:网络请求的 "传输规则"](#1、协议部分:网络请求的 “传输规则”)

[2、 域名部分:网络请求的 "目标地址"](#2、 域名部分:网络请求的 “目标地址”)

[3、端口部分:网络请求的 "服务入口"](#3、端口部分:网络请求的 “服务入口”)

[4、页面 / 方法部分:网络请求的 "具体资源"](#4、页面 / 方法部分:网络请求的 “具体资源”)

[5、参数部分:网络请求的 "数据传递"](#5、参数部分:网络请求的 “数据传递”)

[总结:URL 结构核心逻辑](#总结:URL 结构核心逻辑)

1.2、FastAPI简介与核心优势

1.3、安装FastAPI库和uvicorn库

1.4、创建fastapi项目

2、第一个fastapi程序

2.1、通过命令启动服务

2.2、通过调试启动服务

2.3、通过py文件启动服务

1、写法一

2、写法二

3、FastAPI文档服务

3.1、docs

3.2、redoc

3.3、交互式文档的优势


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_name

200:表示访问成功

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参数(热重载)就不用重启服务,在修改代码后会启动服务,并自动重新加载内容。

命令:

python 复制代码
uvicorn 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文件中加入下面代码:

python 复制代码
import 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 请求测试,避免使⽤其他⼯具。
相关推荐
闲人编程1 小时前
Flask应用工厂模式:构建可扩展的大型应用
后端·python·flask·工厂模式·codecapsule·应用工厂
LitchiCheng1 小时前
Mujoco 检验 KDL 和 Pinocchio 运动学 FK 是否一致
人工智能·python
ZhengEnCi1 小时前
P3H1-Python-sys模块完全指南-系统参数与命令行参数处理利器
python
猫头虎1 小时前
如何解决pip install网络报错SSLError: TLSV1_ALERT_PROTOCOL_VERSION(OpenSSL过旧)问题
网络·python·scrapy·pycharm·beautifulsoup·pip·scipy
帮帮志1 小时前
05【AI大模型对话/创建项目】通过pycharm创建大模型项目,关联Anaconda环境
ide·人工智能·python·语言模型·pycharm
海边夕阳20061 小时前
【每天一个AI小知识】:什么是目标检测?
人工智能·python·深度学习·目标检测·机器学习·计算机视觉·目标跟踪
咖啡の猫1 小时前
Python分支结构
服务器·网络·python
Blossom.1181 小时前
基于Mamba-2的实时销量预测系统:如何用选择性状态空间干掉Transformer的O(n²)噩梦
人工智能·python·深度学习·react.js·机器学习·设计模式·transformer
Wise玩转AI1 小时前
Day 26|智能体的“伦理与安全边界”
人工智能·python·安全·ai·chatgpt·ai智能体