如何在NestJS中通过幂等键实现幂等性?

问题描述 投票:0回答:2

我了解到,鉴于发送的相同请求,幂等请求必须返回相同的响应。但不太确定如何在 Nestjs 架构中实现这一点?如果资源已经创建并且识别到重复请求,则应返回该资源。我怀疑逻辑一定是在服务层面......

我尝试过使用拦截器,但据我所知它们只能处理请求。我的意思是,我不能做类似“嘿,我知道这个请求,所以返回这个存储的数据并且不要处理它两次”之类的事情。

但是好吧,有

middlewares
。我可以在主要处理请求之前发送响应。但在这种情况下,我无法缓存/存储请求的响应...只是因为使用
middlewares
我无法访问响应对象。

有什么想法吗?

rest nestjs middleware interceptor idempotent
2个回答
0
投票

通过 definition 幂等 HTTP 方法(请求的结果是

如果相同的请求可以连续发出一次或多次且具有相同的效果,同时使服务器处于相同的状态,则 HTTP 方法是幂等的。

所以缓存并不完全是使方法处理程序幂等的原因,而是它所执行的操作的原因。

如果你想缓存请求的结果,你可以使用内置的nestjs

CacheInterceptor
。全局使用它,每个控制器甚至每个方法处理程序(与每个拦截器相同)。
首先将缓存模块导入到您需要的模块(或根模块并将其设为全局)
CacheModule.register({ isGlobal: true, })
,然后用它装饰您的控制器/方法处理程序
@UseInterceptor(CacheInterceptor)

全局使用拦截器可以通过多种方式完成,但最直接的方法很简单

app.useGlobalInterceptors(new CacheInterceptor())

注意:它仅缓存

GET
开箱即用的请求,因此如果您需要其他请求,可以扩展它以添加您的逻辑


0
投票

您也可以使用这个包让您的生活更轻松https://www.npmjs.com/package/@node-idempotency/nestjs

© www.soinside.com 2019 - 2024. All rights reserved.