当前位置: 首页 > 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中间件):先看你是不是从允许的街区(域名)来…...

PD 2.0 与 PD 3.0 深度解析:从固定档位到 PPS 精细化供电的技术演进

USB Power Delivery(USB PD)是USB-IF制定的通用快充与供电协议,依托Type-C接口实现高功率、多功能电力传输,已成为手机、笔记本、平板、外设等设备的主流供电标准。PD 2.0奠定高功率快充基础,PD 3.0则以PPS可编程电源为…...

PyCharm虚拟环境配置避坑指南:为什么你的模块导入有提示但运行报错?

PyCharm虚拟环境配置避坑指南:为什么你的模块导入有提示但运行报错? 作为Python开发者,PyCharm的智能提示功能是我们日常开发的重要助力。但你是否遇到过这样的情况:明明在虚拟环境中安装了模块,代码运行时一切正常&am…...

Swift学习笔记21-内存管理

// // main.swift // class21 内存管理(面试题为主,基本都过气了,没实践意义) // // Created by sakiko on 2026/4/7. //import Foundationprint("Hello, World!")//Swift 使用自动引用计数(ARC&#xff…...

2026应用质量监控Bugly:全平台高效定位与统一管理实践

2026应用质量监控Bugly:全平台高效定位与统一管理实践 随着移动与泛终端应用进入多平台、多架构、全球化并行演进的阶段,研发流程对质量监控的实时性、跨端一致性与闭环处置能力提出更高要求。企业不仅要快速捕获崩溃与性能异常,更需在复杂环…...

超算新手避坑指南:第一次用Slurm提交MATLAB作业就成功的5个关键点

超算新手避坑指南:第一次用Slurm提交MATLAB作业就成功的5个关键点 第一次在超算平台上用Slurm提交MATLAB作业,就像在陌生的城市里开车——即使有导航,也难免会错过几个路口。作为过来人,我完全理解那种看着作业失败却不知从何查起…...

R语言实战:用mice包搞定缺失值多重插补(附完整代码+避坑指南)

R语言实战:用mice包实现缺失值多重插补的完整解决方案 1. 缺失值处理的挑战与多重插补原理 在实际数据分析工作中,我们经常会遇到数据缺失的情况。传统方法如直接删除缺失记录或简单均值填充往往会导致信息损失或统计偏差。多重插补(Multiple Imputation…...

别再只问ChatGPT了!实测混元、DeepSeek、通义千问的数学解题能力,附保姆级API调用避坑指南

三大数学大模型API实战测评:从注册到调用的全流程避坑指南 当我们需要在项目中集成数学解题能力时,市面上主流的大模型API各有千秋。本文将带您深入体验混元、DeepSeek和通义千问三大模型的API调用全流程,从账号注册到结果解析,手…...

OpenVINO-Audacity插件:AI音频处理全流程加速指南

OpenVINO-Audacity插件:AI音频处理全流程加速指南 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity Open…...

8.8 万赋能光伏新局!一网推助伍征新能源实现询盘零的突破

近日,江苏一网推网络技术有限公司(以下简称 “一网推”)与昆山伍征新能源有限公司(以下简称 “伍征新能源”)的百度爱采购代运营合作案例落地,成为光伏行业数字化转型的标杆。双方合作金额达 88700 元&…...

# 拍摄剪辑文案公司哪个技术强?专业视角解析行业标杆在数

拍摄剪辑文案公司哪个技术强?专业视角解析行业标杆在当今数字内容爆炸式增长的时代,优质视频内容已成为品牌营销的核心竞争力。"拍摄剪辑文案策划"的一站式服务模式,正在取代传统的分散作业方式,为各类企业提供更高效的…...

3分钟快速上手:res-downloader终极跨平台资源下载全攻略

3分钟快速上手:res-downloader终极跨平台资源下载全攻略 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 还在为无…...

WeReader:革新微信读书体验的高效笔记管理工具

WeReader:革新微信读书体验的高效笔记管理工具 【免费下载链接】wereader 一个浏览器扩展:主要用于微信读书做笔记,对常使用 Markdown 做笔记的读者比较有帮助。 项目地址: https://gitcode.com/gh_mirrors/wer/wereader 你是否曾为微…...

微信聊天记录永久保存指南:数据备份与隐私保护全攻略

微信聊天记录永久保存指南:数据备份与隐私保护全攻略 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChat…...

数据驱动的战斗优化:GBFR Logs全方位解析与实战指南

数据驱动的战斗优化:GBFR Logs全方位解析与实战指南 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/gb/gbfr-logs 在《碧…...

Arduino Nano + A4988驱动42步进电机:从接线到代码的完整避坑指南

Arduino Nano与A4988驱动42步进电机实战指南 刚拿到Arduino Nano和A4988驱动板时,看着那些密密麻麻的引脚和电机线缆,不少初学者都会感到无从下手。步进电机控制看似简单,但实际搭建时总会遇到各种意想不到的问题——电机抖动不转、方向控制失…...

PLIC中断控制器深度解析:手把手实现RISCV多核中断调度(含设备树配置)

PLIC中断控制器深度解析:手把手实现RISCV多核中断调度(含设备树配置) 在物联网设备开发中,高效的中断处理机制往往是系统稳定性的关键。想象一下,当你设计的智能网关需要同时处理数十个传感器的数据流时,如…...

DNS协议详解:作用、完整解析过程(面试+考试必背版)

DNS协议详解:作用、完整解析过程(面试考试必背版)一、DNS 协议的作用主要功能二、DNS 核心基础知识三、DNS 完整解析过程(超清晰 8 步,面试必考)实验场景解析流程(标准递归迭代查询)…...

隐式神经表示在计算机视觉中的5个关键应用:图像超分辨率到3D场景重建

隐式神经表示在计算机视觉中的5个关键应用:图像超分辨率到3D场景重建 【免费下载链接】awesome-implicit-representations A curated list of resources on implicit neural representations. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-implicit-repr…...

【郑州大学主办 | SPIE出版社出版,ISSNISBN双刊号出版 | 通信技术、计算机视觉与算法、嵌入式系统技术、机器人领域EI】2026年机器学习与嵌入式系统国际学术会议(MLES 2026)

MLES 2026会议已成功申请到SPIE出版社出版!ISSN&ISBN双刊号出版! 2026年机器学习与嵌入式系统国际学术会议(MLES 2026) 2026 International Conference on Machine Learning and Embedded Systems 2026年4月24-26日 &a…...

【WRF-Chem编译安装】使用集群系统环境编译安装WRF-Chem

目录 安装编译思路 编译错误记录 尝试编译器:Intel 尝试编译器:Gun 附录:完整自动化编译脚本 参考 安装编译思路 使用集群系统自带的 module 加载 MPI 和编译器: module avail # 查看可用的模块 module load compiler/intel # (举例) 加载编译器 module load mpi/open…...

如何快速构建本地AI应用:llama-cpp-python终极指南

如何快速构建本地AI应用:llama-cpp-python终极指南 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 想要在本地运行大型语言模型而无需依赖云端服务吗?llama-cp…...

【海南大学主办 | 连续4届完成EI检索,见刊检索稳定!清华大学教授、国家杰青等学者出席报告】第五届电子信息工程、大数据与计算机技术国际学术会议 (EIBDCT 2026)

连续4届完成EI检索,见刊检索稳定!清华大学教授、国家杰青等学者出席报告! 第五届电子信息工程、大数据与计算机技术国际学术会议 (EIBDCT 2026) 2026 5th International Conference on Electronic Information Engineering, Big Data and C…...

Real-ESRGAN-GUI:终极AI图像增强工具,让模糊图片秒变高清

Real-ESRGAN-GUI:终极AI图像增强工具,让模糊图片秒变高清 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 在数字时代,我们每天都会接触…...

OBS-Multi-RTMP终极指南:5分钟实现多平台同步直播的完整解决方案

OBS-Multi-RTMP终极指南:5分钟实现多平台同步直播的完整解决方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp OBS-Multi-RTMP是一款专为直播创作者设计的开源插件&#x…...

3个强力步骤:百度网盘插件让macOS用户突破下载限速

3个强力步骤:百度网盘插件让macOS用户突破下载限速 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 副标题:如何在不升级会员的情…...

告别固定菜单!用YOLO-World实现‘看图说话’式物体检测,保姆级环境搭建与实战教程

告别固定菜单!用YOLO-World实现‘看图说话’式物体检测,保姆级环境搭建与实战教程 想象一下,你正在开发一款智能家居应用,需要识别用户随意描述的物品——比如"放在沙发左侧的无线充电器"或"窗台上那盆多肉植物&qu…...

AI辅助开发新体验:描述需求,让快马AI直接打开一个情感分析应用

AI辅助开发新体验:描述需求,让快马AI直接打开一个情感分析应用 最近在尝试用AI辅助开发,发现InsCode(快马)平台的体验真的很惊艳。以前做个简单的文本情感分析,得自己找数据集、训练模型、写前后端代码,现在只需要用自…...

U-Boot调试必备:md命令验证SPI Flash的原理与实操细节

要搞懂md命令为何能验证SPI Flash,核心是理清两个关键: md命令的本质功能; SPI Flash的存储映射访问模式。 这两者的结合,才让“用md命令验证Flash”成为可能,而且这也是嵌入式开发中最常用、最便捷的Flash验证方式之一。 ddr与spi控制器一种连接方式 先明确md命令的核…...

别再只看功能列表了!从价格、许可证到售后,全面拆解UFS Explorer和R-Studio的‘隐藏成本’

数据恢复软件采购指南:揭秘UFS Explorer与R-Studio的真实成本结构 当企业IT负责人或数据恢复工程师面临软件采购决策时,官网宣传的功能列表往往只是冰山一角。UFS Explorer Professional Recovery和R-Studio Technician作为行业两大主流解决方案&#xf…...