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

007、声码器技术对比:WaveNet、WaveGlow 与 HiFi-GAN 原理剖析

从一段深夜调试日志说起 上周在部署新版 TTS 时遇到个诡异问题:合成出的语音在安静环境下听着还行,一到车载环境就出现断续的“嘶嘶”声。频谱仪上能看到 8kHz 附近有些奇怪的谐波残留——这不是梅尔谱的问题,声码器背锅。于是又把几个主流声码器重新拉出来跑了一遍对比测试…...

手部姿态估计公开数据集全解析:从FreiHAND到Dexter的实战指南

1. 手部姿态估计数据集的核心价值与应用场景 手部姿态估计作为计算机视觉领域的重要分支,在虚拟现实、人机交互、医疗康复等场景中发挥着关键作用。而高质量的数据集就像厨师的食材库,直接决定了算法模型的"烹饪效果"。我经手过的工业级手势识…...

阶段零:AI、机器学习、深度学习之间的关系

AI、机器学习、深度学习:一文讲透三者的关系从零开始,用最直观的方式理解AI核心概念一、一句话说清楚 深度学习 ⊂ 机器学习 ⊂ 人工智能 这三个概念是层层包含的关系,就像俄罗斯套娃一样: 最外层:人工智能&#xff08…...

MetaBCI脑机接口开发终极指南:从零到实战的完整教程

MetaBCI脑机接口开发终极指南:从零到实战的完整教程 【免费下载链接】MetaBCI MetaBCI: China’s first open-source platform for non-invasive brain computer interface. The project of MetaBCI is led by Prof. Minpeng Xu from Tianjin University, China. …...

保姆级避坑指南:在Ubuntu 18.04上编译i.MX8M Plus Yocto镜像(含依赖包处理)

保姆级避坑指南:在Ubuntu 18.04上编译i.MX8M Plus Yocto镜像全流程实战 1. 环境准备与依赖处理 i.MX8M Plus作为NXP旗舰级处理器,其Yocto编译环境对系统版本有严格要求。Ubuntu 18.04 LTS是最稳定的基础平台,但需要特别注意以下几个关键配置&…...

QtAwesome:为Python桌面应用添加专业图标库的终极指南

QtAwesome:为Python桌面应用添加专业图标库的终极指南 【免费下载链接】qtawesome Iconic fonts in PyQt and PySide applications 项目地址: https://gitcode.com/gh_mirrors/qta/qtawesome 你是否厌倦了为PyQt或PySide应用寻找合适的图标资源?Q…...

久坐危机:软件测试工程师的健康警报与破局之道

在数字化浪潮中,软件测试工程师作为产品质量的终极守门人,长期深陷“静态工作陷阱”。数据显示,测试从业者日均久坐时间高达9.2小时,引发三重健康危机:一、职业健康风险图谱肌肉骨骼系统颈椎反弓发生率68%(…...

skill炼化真人?我刷了三天短视频,发现自己再也没法好好看完一部电影了

说实话,这事我想了很久,一直不敢写。因为太扎心了。春节那会儿,我花了八十多块钱买票,坐进电影院。开场不到二十分钟,我下意识地掏出手机,刷了刷抖音。等回过神来,电影已经放到快一半了。我努力…...

SQLite 3.53.0 发布,更新亮点多

世界上使用最多的数据库引擎 SQLite 发布了 3.53.0 版本。此次更新涵盖修复漏洞、新增功能与接口、改进查询规划等多方面,为开发者带来诸多便利。SQLite 简介SQLite 是一个用 C 语言编写的小型、快速且独立的 SQL 数据库引擎,其源代码属公共领域&#xf…...

uniapp中SQLite表缺失问题的排查与解决——以“no such table”错误为例

1. 初识"no such table"错误:从报错信息说起 第一次在uniapp开发中遇到SQLite的"no such table"错误时,我盯着控制台输出的-1404错误代码足足愣了三分钟。控制台清晰地显示着: { "code": -1404, "message…...

YOLOv8实战指南:从零开始构建计算机视觉应用

1. YOLOv8入门:为什么选择这个计算机视觉神器 第一次接触YOLOv8时,我完全被它的速度惊到了。当时我正在做一个智能停车场的项目,需要在实时视频流中检测车辆。试过几个主流模型后,YOLOv8的表现简直像开了挂——在保持高精度的同时…...

达摩院StructBERT中文句向量工具效果展示:多行业术语同义映射案例集

达摩院StructBERT中文句向量工具效果展示:多行业术语同义映射案例集 1. 项目简介与核心价值 StructBERT是阿里达摩院对经典BERT模型的重大升级,通过引入"词序目标"和"句子序目标"等创新预训练策略,在中文语序理解、语法…...

RV绝缘圆形端子铜鼻子AI视觉检测参数

在电气连接与线束加工领域,RV绝缘圆形端子(俗称铜鼻子) 用于电缆终端的可靠连接。其质量直接影响导电性、抗拉强度及绝缘安全性。AI视觉检测设备通过高分辨率CCD成像与深度学习算法,对端子的关键参数进行全自动测量与判定&#xf…...

ACPL-M61U-500E,宽温高共模抑制比高速数字光耦合器

简介今天我要向大家介绍的是 Broadcom 的数字光耦合器——ACPL-M61U-500E。它是一款单通道高速逻辑门光耦合器,采用紧凑型、兼容自动插入的5引脚SO-5表面贴装封装。该器件内部通过绝缘层将AlGaAs发光二极管与集成高增益光探测器进行电隔离,输出端为开路集…...

网络工程师-网络规划与设计(一):网络开发过程与逻辑网络设计

一、引言1.1 核心概念定义网络规划与设计是将业务需求转化为可落地网络技术方案的系统工程,覆盖从需求调研到运维优化的全生命周期,是网络可靠性、可扩展性、安全性的核心保障。在软考网络工程师考试中,本章节属于网络系统设计与管理模块&…...

如何在5分钟内用Marp for VS Code创建专业幻灯片:终极Markdown演示文稿指南

如何在5分钟内用Marp for VS Code创建专业幻灯片:终极Markdown演示文稿指南 【免费下载链接】marp-vscode Marp for VS Code: Create slide deck written in Marp Markdown on VS Code 项目地址: https://gitcode.com/gh_mirrors/ma/marp-vscode 还在为制作演…...

终极AI唇形同步指南:sd-wav2lip-uhq打造专业级口型匹配方案

终极AI唇形同步指南:sd-wav2lip-uhq打造专业级口型匹配方案 【免费下载链接】sd-wav2lip-uhq Wav2Lip UHQ extension for Automatic1111 项目地址: https://gitcode.com/gh_mirrors/sd/sd-wav2lip-uhq 想要制作逼真的AI配音视频,却总是被不自然的…...

OmenSuperHub终极指南:高效解锁惠普游戏本硬件控制与性能优化

OmenSuperHub终极指南:高效解锁惠普游戏本硬件控制与性能优化 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普OMEN…...

ESP居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现漳

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

如何在普通电脑上运行专业AI绘画:FLUX.1-dev FP8量化模型完整指南

如何在普通电脑上运行专业AI绘画:FLUX.1-dev FP8量化模型完整指南 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev 想要在普通电脑上体验专业级AI绘画创作吗?FLUX.1-dev FP8量化模型正是为你量身打…...

AT6558R-5N32-00:多模卫星导航SOC芯片在智能穿戴与车载系统的低功耗设计解析

1. AT6558R芯片的核心技术解析 AT6558R-5N32-00这颗SOC芯片最让我惊艳的是它把射频前端、数字基带处理器、32位RISC CPU和电源管理全部集成在5x5mm的封装里。这就像把一整个导航接收机系统塞进了绿豆大小的空间,我在实际项目中用它替换传统方案时,PCB面积…...

利用Ucli命令实现动态时钟频率监测与自动化验证

1. 动态时钟频率监测的挑战与解决方案 在芯片验证过程中,时钟频率监测是个让人又爱又恨的工作。传统方法往往需要反复修改测试平台代码、重新编译仿真模型,每次改动都要耗费大量等待时间。特别是在验证OCC(On-Chip Clock Controller&#xff…...

UML 建模实战指南:从用例图到状态图的完整流程解析

1. UML建模入门:从需求到实现的关键桥梁 第一次接触UML时,我和大多数人一样被那些方框箭头搞得头晕眼花。直到参与电商系统开发,才真正明白这套可视化工具的价值——它就像软件开发界的"施工蓝图",让产品经理、开发人员…...

告别手动排版!用NoteExpress一键搞定Elsevier期刊投稿的参考文献格式

科研效率革命:NoteExpress全自动参考文献排版实战指南 当你熬过无数个深夜终于完成论文初稿,却在参考文献排版环节卡壳时,那种挫败感我太熟悉了。去年投稿Elsevier期刊的经历让我深刻体会到,手动调整参考文献格式不仅耗时费力&…...

Wavedrom高阶玩法:用config属性打造出版级时序图报告

Wavedrom高阶玩法:用config属性打造出版级时序图报告 在数字电路设计、芯片验证和学术论文写作中,时序图是不可或缺的工程语言。当基础功能已无法满足出版级文档需求时,Wavedrom的config属性集便成为工程师的精密调校工具包。本文将深入解析…...

基于LFM2.5-1.2B-Thinking-GGUF的智能Agent设计:自动化任务编排与执行

基于LFM2.5-1.2B-Thinking-GGUF的智能Agent设计:自动化任务编排与执行 1. 智能Agent如何改变工作方式 想象一下,你早上刚到办公室,电脑上的智能助手已经自动完成了这些工作:检查了昨晚的邮件,筛选出重要内容并生成摘…...

利用高德地图API与Python实现行政区划数据自动化采集与存储

1. 高德地图API入门指南 第一次接触高德地图API时,我被它丰富的功能震撼到了。作为国内领先的地图服务提供商,高德开放平台提供了超过100种API接口,其中行政区划查询接口特别适合需要地理信息数据的开发者。这个接口不仅能获取省市县三级行政…...

计算机视觉基石:6大CNN模型的创新与突破

计算机视觉基石:6大CNN模型的创新与突破 本文详细解析了计算机视觉基石:6大CNN模型的创新与突破,内容如下: ​目录1. LeNet(90/98)诞生于1990年,在手写体字符识别领域创造性的引入了卷积神经网…...

零基础玩转MiniCPM-V-2_6:Ollama一键部署,图片视频都能看懂

零基础玩转MiniCPM-V-2_6:Ollama一键部署,图片视频都能看懂 1. 为什么选择MiniCPM-V-2_6? MiniCPM-V-2_6是目前视觉多模态领域的一颗新星,它能让你的电脑像人一样"看懂"图片和视频内容。想象一下,你上传一…...