当前位置: 首页 > article >正文

一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)柑

一、中间件是啥咱用“餐厅”打个比方想象一下你的FastAPI应用是个高级餐厅。?? 顾客客户端请求来到门口。- 迎宾CORS中间件先看你是不是从允许的街区域名来的不是就直接劝退返回CORS错误。- 领位员日志中间件记下顾客几点来的、几个人。- 安检认证中间件检查你有没有预约码Token。?? 之后顾客才能见到真正的厨师你的路径操作函数点菜吃饭处理业务逻辑。?? 吃完离开时还得经过传菜员响应处理中间件可能给打包盒贴个标签添加响应头。这一系列站在“核心业务”前后的服务人员就是中间件。它的核心价值在于全局处理、业务无侵入。官方文档讲得比较散咱们今天就把这块硬骨头啃透直接上代码。?? 二、核心怎么用从最常用的CORS开始好咱们先来解决开头的“跨域”问题。这是99%的Web应用都会遇到的。from fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddlewareapp FastAPI()# 1. 配置允许的源、方法、请求头origins [http://localhost:3000, # 你的前端开发地址https://your-production-site.com,]# 2. 添加中间件app.add_middleware(CORSMiddleware,allow_originsorigins, # 允许的源列表也可以用 [*] 放行所有不安全allow_credentialsTrue, # 允许携带Cookieallow_methods[*], # 允许所有方法 (GET, POST, 等)allow_headers[*], # 允许所有请求头)app.get(/)async def main():return {message: Hello World}这里千万别学我当初偷懒图省事直接上 allow_origins[*]这在生产环境是安全大忌相当于餐厅大门敞开谁都能进。线上务必明确指定前端域名?? 三、动手写一个自己的中间件接下来重点来了自定义中间件。比如我们要给每个请求记日志并计算处理耗时。import timefrom fastapi import FastAPI, Requestapp FastAPI()app.middleware(http) # 这是关键装饰器async def log_request_time(request: Request, call_next):# 1. 请求进来时# 这里我们使用 time.perf_counter() 而不是 time.time()因为它对于这些用例可能更精确start_time time.perf_counter()path request.url.pathmethod request.methodprint(f?? 收到请求: {method} {path})# 2. 把请求交给下一个处理环节可能是其他中间件或者是最终的路由response await call_next(request)# 3. 响应返回前process_time time.perf_counter() - start_timeresponse.headers[X-Process-Time] str(process_time) # 可以往响应头加东西print(f? 请求完成: {method} {path}, 耗时: {process_time:.4f}秒)return responseapp.get(/test)async def test():return {message: ok}访问 /test看看控制台是不是日志和响应头都有了这就是一个最基础的HTTP中间件。划重点 中间件函数接收一个 call_next它就像接力棒你必须调用它await call_next(request)请求才能继续往后走。你在它前面和后面写的代码就分别对应了“请求处理”和“响应处理”两个阶段。?? 四、灵魂拷问多个中间件谁先谁后你是不是以为加完就完事了多个中间件的执行顺序是超级易错点想象一下你既加了CORS中间件又加了上面的日志中间件还加了一个认证中间件。它们怎么排队结论按照添加的相反顺序执行“请求阶段”再按照添加的正序执行“响应阶段”。 像洋葱一样一层层进去再一层层出来。app FastAPI()# 假设我们按顺序添加三个中间件app.add_middleware(MiddlewareC) # 第三个添加app.add_middleware(MiddlewareB) # 第二个添加app.middleware(http)(middleware_a) # 第一个添加装饰器写法# 实际执行顺序请求阶段# 1. middleware_a 的请求处理代码# 2. MiddlewareB 的请求处理代码# 3. MiddlewareC 的请求处理代码# --- 到达路由函数 ---# 4. MiddlewareC 的响应处理代码# 5. MiddlewareB 的响应处理代码# 6. middleware_a 的响应处理代码# --- 响应返回给客户端 ---官方文档虽然说了是“装饰器顺序”但用 app.add_middleware() 添加时更容易迷糊。记不住就背下这个口诀“后来居上请求原路返回响应”。 设计时要把依赖关系想清楚比如认证应该放在靠“里”层后添加日志可以放在最“外”层先添加。?? 五、进阶更底层的ASGI中间件再说个容易翻车的点。上面我们用 app.middleware(http) 叫HTTP中间件是FastAPI封装好的。还有一种更底层、更强大的叫ASGI中间件。它和HTTP中间件啥区别好比一个是高级餐厅的固定流程HTTP另一个是后厨的原子操作ASGI能处理WebSocket等更多协议。怎么用通常你需要一个第三方库比如 starlette-context 来在请求中传递全局数据或者自己封装FastAPI在fastapi.middleware中提供了几个中间件仅仅是为了方便开发者但大多数可用的中间件直接来自Starlettefrom fastapi import FastAPIfrom starlette.middleware.base import BaseHTTPMiddlewareclass CustomHeaderMiddleware(BaseHTTPMiddleware):async def dispatch(self, request, call_next):response await call_next(request)response.headers[X-Custom-Header] MyValuereturn responseapp FastAPI()app.add_middleware(CustomHeaderMiddleware) # 这里添加的就是ASGI中间件注意 BaseHTTPMiddleware 使用简单但官方提示可能有轻微性能损耗因为每个请求都会创建新的类实例。对于超高并发场景用之前的函数式 app.middleware(http) 或直接写纯ASGI中间件是更优解。??可牙盟煞

相关文章:

一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)柑

一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...

电子电路中的“心脏”:电源忧

前言 Kubernetes 本身并不复杂,是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps,这些基础组件简单直接,甚至显得有些枯燥。但后来我…...

探索信息获取新维度:突破信息茧房的智能工具实践指南

探索信息获取新维度:突破信息茧房的智能工具实践指南 你是否曾在海量信息中迷失方向?当打开浏览器面对无数标签页却找不到真正需要的内容时,当花费数小时筛选资料却发现质量参差不齐时,当重要信息被层层付费壁垒阻隔时——这种普遍…...

使用 C# 删除 PDF 中的数字签名们

一、 什么是 AI Skills:从工具级到框架级的演化 AI Skills(AI 技能) 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初,Skills 被视为“工具级”的增强,如简单的文件读写或终端操作,方便用户快速…...

解锁3大核心功能:免费阅读工具让知识获取不再受限

解锁3大核心功能:免费阅读工具让知识获取不再受限 你是否曾在查找资料时遇到这样的困境:精心筛选的文章被付费墙阻隔,想要深入学习却被订阅费用挡在门外?免费阅读工具就像一把万能钥匙,能够帮助你突破内容访问限制&…...

如何突破付费壁垒?解锁优质内容的非技术指南

如何突破付费壁垒?解锁优质内容的非技术指南 在信息爆炸的时代,优质内容往往被付费墙阻挡。想要免费获取付费内容方法?本文将为你介绍一款高效的内容解锁工具使用技巧,教你合法绕过付费墙指南,轻松获取有价值的信息资源…...

Bypass Paywalls Chrome Clean:突破付费内容壁垒的高效浏览器扩展

Bypass Paywalls Chrome Clean:突破付费内容壁垒的高效浏览器扩展 在信息爆炸的数字时代,优质内容常被付费墙阻隔,学术文献、深度报道和专业期刊的访问限制成为知识获取的主要障碍。Bypass Paywalls Chrome Clean作为一款开源浏览器扩展&…...

打破信息壁垒:Bypass Paywalls Chrome Clean的技术实现与伦理边界

打破信息壁垒:Bypass Paywalls Chrome Clean的技术实现与伦理边界 核心痛点:数字时代的知识获取困境 独立创作者的内容付费墙困境 🖋️ 独立科技作者李明在撰写行业分析报告时,需要参考多家商业媒体的深度报道。然而,每…...

突破内容壁垒:Bypass Paywalls Chrome Clean全方位使用指南

突破内容壁垒:Bypass Paywalls Chrome Clean全方位使用指南 在信息爆炸的时代,优质内容往往被付费墙所阻隔。无论是学术研究所需的专业期刊,还是深度报道的新闻文章,都可能因订阅费用而让普通用户望而却步。Bypass Paywalls Chrom…...

内容解锁工具:Bypass Paywalls Chrome Clean的全方位信息获取方案

内容解锁工具:Bypass Paywalls Chrome Clean的全方位信息获取方案 在信息爆炸的时代,获取优质内容往往需要付出高昂的订阅费用。Bypass Paywalls Chrome Clean作为一款免费开源的浏览器扩展,为用户提供了突破付费内容限制的解决方案&#xff…...

测试人员聚焦于AI的4个核心方向

测试工程师的核心竞争力将聚焦于“AI无法替代的业务理解与质量设计能力”,具体可归纳为4个核心方向: 1. Prompt工程能力:精准提炼业务需求与测试要点,将“模糊需求”转化为“AI可理解的精准指令”,这是高效协同AI的基础…...

OpenClaw多通道接入:百川2-13B-4bits量化版同时对接飞书与钉钉

OpenClaw多通道接入:百川2-13B-4bits量化版同时对接飞书与钉钉 1. 为什么需要多通道接入? 上周我团队遇到一个典型问题:产品、研发、运营三个小组分别使用钉钉和飞书作为主要沟通工具。每次需要协调资源时,要么在不同平台反复切…...

AI技术赋能学术写作,自动目录生成与内容优化,效率飞跃时间节省。

工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处理 15-30分钟 期刊投稿 保留专业术语 秒篇 一键式处…...

借助智能工具,学术写作目录自动生成,内容精准优化,时间高效利用。

工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处理 15-30分钟 期刊投稿 保留专业术语 秒篇 一键式处…...

突破内容访问限制:从原理到实践的完整指南

突破内容访问限制:从原理到实践的完整指南 在信息爆炸的时代,我们经常遇到这样的困境:找到一篇价值极高的深度报道,却被"订阅后阅读全文"的弹窗拦住去路;发现一份关键研究报告,却被告知"免费…...

Loom上线前必须做的6项静态检查+4类动态熔断配置(GitHub星标开源Checklist)

第一章:Loom响应式编程转型的必要性与风险全景图随着微服务架构深度演进与实时数据流场景爆发式增长,传统阻塞式I/O与线程模型在高并发、低延迟诉求下日益暴露瓶颈。Project Loom引入虚拟线程(Virtual Threads)与结构化并发原语&a…...

2001-2023年各省农产品进出口额数据(无缺失)

2001-2023年各省农产品进出口额数据 1、时间:2001-2023年 2、来源:商务BU、农业年鉴、海关总署 3、指标:年份、省份、农产品出口额(亿元)、农产品进口额(亿元)、农产品出口额(万美…...

黑马程序员python核心语法-基础知识

python快捷键使用CtrlAlts 打开软件设置CtrlD 复制当前行代码CtrlAlt上\下 将当前代码上移或下移Ctrlshiftf10 运行当前代码文件Ctrlf6:重命名文件Ctrlf 搜索# 字面量的写法 print(100) # 整数(int) print(3.14) # 浮点数/小数(float) print(True) # 布尔&#xf…...

【更新至2024年】上市公司ESG评级评分数据合集(十份数据:华证年度、华证季度、Wind、商道融绿、富时罗素、彭博、润灵环球、MSCI、cnrds、盟浪)

【更新至2024年】上市公司ESG评级评分数据合集(十份数据:华证年度、华证季度、Wind、商道融绿、富时罗素、彭博、润灵环球、MSCI、cnrds、盟浪) 一、2009-2024年上市公司华证esg评级、评分年度数据(含细分项) 二、20…...

深入解析HashMap:30道经典面试题带你彻底搞懂

深入解析HashMap:30道经典面试题带你彻底搞懂 HashMap是Java面试中的“常客”,无论是初级还是高级开发工程师,HashMap相关的问题几乎都会出现在面试中。本文将汇总最经典的HashMap面试题,从基础原理到源码分析,帮助你…...

Ollama安装-运行模型-常用运维命令

方法1:官方命令行安装 安装: curl -fsSL https://ollama.com/install.sh | sh 注:需要网络支持,可以安装的话就不需要执行手动安装的配置,官方脚本会把所有东西都配置好,如果要修改镜像源可查看后面修改镜像…...

[特殊字符] 第88课:目标和

想系统提升编程能力、查看更完整的学习路线,欢迎访问 AI Compass:https://github.com/tingaicompass/AI-Compass 仓库持续更新刷题题解、Python 基础和 AI 实战内容,适合想高效进阶的你。 📖 第88课:目标和 模块:动态规划 | 难度:…...

[特殊字符] 第87课:股票含冷冻期

想系统提升编程能力、查看更完整的学习路线,欢迎访问 AI Compass:https://github.com/tingaicompass/AI-Compass 仓库持续更新刷题题解、Python 基础和 AI 实战内容,适合想高效进阶的你。📖 第87课:股票含冷冻期模块:动态规划 | 难…...

从付费软件到自主开发:我用AI和FFmpeg实现了一个录屏工具淌

我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...

HJ169 灵异背包?

题目题解(36)讨论(22)排行 简单 通过率:43.17% 时间限制:1秒 空间限制:256M 知识点贪心 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 给定 nn 个正…...

Piggy_Packages V2026.1 帮助文档(七)WRFDA同化试验

数值天气预报的主要误差来源于初始场的误差。资料同化(Data Assimilation)是一种将观测资料与数值天气预报(NWP)产品及其各自的误差统计数据相结合的技术,旨在为数值模式提供更加准确的初始场。 在“Piggy_Packages V…...

Serverless 架构设计与实践:构建高效的无服务器应用

Serverless 架构设计与实践:构建高效的无服务器应用 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知 Serverless 架构在现代云原生应用中的重要性。随着云计算的发展,Serverless 架构以其按需付费、自动扩缩容等特性&#xff0c…...

OpenClaw+千问3.5-9B智能家居:自然语言控制家庭设备

OpenClaw千问3.5-9B智能家居:自然语言控制家庭设备 1. 为什么需要自然语言控制智能家居? 去年装修新房时,我装了整整27个智能设备——从客厅的吸顶灯到厨房的窗帘电机,甚至马桶盖都接入了米家系统。但很快发现一个问题&#xff…...

知识竞赛软件如何选择?抢答器功能

知识竞赛软件怎么选?抢答器功能是关键 组织一场精彩、公平、高效的知识竞赛,离不开专业软件的支持。在众多功能中,抢答器功能往往是决定竞赛成败的核心。本文将系统性地探讨如何选择一款合适的知识竞赛软件,并深入分析抢答器功能…...

Qwen3.5-千问 ZGC在Linux和Windows实现有何区别?

ZGC 在 Linux 和 Windows 上的核心算法(如着色指针、读屏障、并发标记/重定位)是完全一致的,但在底层操作系统接口调用、内存映射实现细节以及平台支持成熟度上存在显著差异。 以下是 ZGC 在 Linux 和 Windows 实现上的主要区别对比&#xff…...