FastAPI 学习之路(三十)中间件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: FastAPI 学习之路(三十)中间件

 什么是中间件呢,"中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作.


  • 它接收你的应用程序的每一个请求.
  • 然后它可以对这个请求做一些事情或者执行任何需要的代码.
  • 然后它将请求传递给应用程序的其他部分 (通过某种路径操作).
  • 然后它获取应用程序生产的响应 (通过某种路径操作).
  • 它可以对该响应做些什么或者执行任何需要的代码.
  • 然后它返回这个 响应.


     那么看下如何创建中间件?

     

要创建中间件你可以在函数的顶部使用装饰器 @app.middleware("http").

中间件参数接收如下参数:

  • request.
  • 一个函数 call_next 它将接收 request 作为参数.
  • 这个函数将 request 传递给相应的 路径操作.
  • 然后它将返回由相应的路径操作生成的 response.
  • 然后你可以在返回 response 前进一步修改它.

   我们看下如何去实现中间件。

import time
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    response.headers['leizishuocceshikaifa']="leizishuoceshikaifa"
    return response
@app.post("/create")
def post():
    return "post"


我们实现一个中间件,

           

   在 response 的前和后 在任何路径操作收到request前,可以添加要和请求一起运行的代码.也可以在响应生成但是返回之前添加代码。


       我们去看下接口输出的结果


image.png


我们看下接口返回的Headers


image.png


我们可以看到,我标记红色的地方,就是我们在请求的中间件中,处理的,默认就给我们返回我们处理后的。

相关文章
|
3月前
|
安全 Dubbo Java
[Java 晋级之路] 框架、中间件等领域都在使用,你还不快来学习Java SPI机制?!
[Java 晋级之路] 框架、中间件等领域都在使用,你还不快来学习Java SPI机制?!
|
8月前
|
消息中间件 存储 中间件
MQ 学习日志(九) MQ 中间件的设计思路
如果让你开发一个消息队列中间件,你会怎么设计架构
68 0
|
8月前
|
开发框架 Java 中间件
【中间件】——EJB学习总结
公共服务框架:支持大量的、由应用服务器提供的系统级服务
|
8月前
|
数据采集 存储 缓存
最常用的限流算法以及如何在http中间件中加入流控 | 周末学习
通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理
|
中间件 开发者
gin框架学习-路由分组和中间件
Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。
283 0
gin框架学习-路由分组和中间件
|
缓存 监控 中间件
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(组件篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(组件篇)
240 0
|
Java 中间件 API
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
197 0
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
|
消息中间件 网络协议 Java
RabbitMQ消息中间件学习3:快速入门案例
rabbitmq是spring一个公司的,所以很多公司 企业选择用rabbitmq。
RabbitMQ消息中间件学习3:快速入门案例
|
消息中间件 存储 网络协议
|
消息中间件 网络协议 中间件
RabbitMQ消息中间件学习1:基本概念与简单实战模式讲解
Message Queue(消息队列),在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。 就是两个子系统之间进行通信,有两种选择,第一种是直接远程调用,第二种是借助第三方完成通信。 发送方称为生产者,接收方称为接受者。
RabbitMQ消息中间件学习1:基本概念与简单实战模式讲解

相关产品

  • 云消息队列 MQ
  • 云消息队列 Kafka 版
  • 微服务引擎