OPERATION钩子

当客户端请求OPERATION编译成的API时(对应9991端口),依次经历登录校验,授权校验,入参校验,参数注入,执行OPERATION,响应转换等步骤。

接下来,我们学习下,该流程图上的分支:OPERATION钩子。

它分为2大类:全局钩子和局部钩子。

全局钩子所有的API共用同一个,都可以修改请求头对象,即ClientRequest。全局钩子有3个,包括:网关钩子(beforeOriginRequest)、数据源前置钩子(onOriginRequest)、数据源后置钩子(onOriginResponse)。

局部钩子每个API单独启停,从是否改变请求逻辑的角度,也可以分为两类:

  • 不改变流程的前后置钩子:

    • 前置钩子:preResolve、mutatingPreResolve

    • 后置钩子:postResolve、mutatingPostResolve

  • 能改变流程:

    • 模拟钩子:mockResolve

    • 自定义钩子:customResolve

HTTP请求流程图

飞布服务请求流程

为了方便理解,我们采用如下OPERATION说明情况。

全局钩子

网关钩子

beforeOriginRequest 钩子又名网关钩子,会拦截所有HTTP请求,可以改写请求内容,也可以终止后续流程。

暂未支持

数据源前置钩子

onOriginRequest 钩子又名数据源前置钩子,在请求每个数据源之前生效。可修改请求数据源时的请求头,也可以用来取消请求。常见用例是:动态授权,动态注入授权参数

数据源后置钩子

onOriginRequest 钩子又名数据源后置钩子,在请求每个数据源之后生效。可修改数据源返回的数据,也可以用来取消请求。常见用例是:若数据源不支持json,可用该方法转换协议

局部钩子

与全局钩子不同,每个OPERTION都有对应的局部钩子,由开关单独控制。

前置钩子

前置钩子在 "执行OPERATION"前执行,可校验参数或修改输入参数。

前置普通钩子

preResolve 钩子在参数注入后执行,能拿到请求入参,常用于入参校验。

前置修改入参钩子

mutatingPreResolve 钩子在参数注入后执行,能拿到请求入参,也能修改请求入参。

后置钩子

后置钩子在 "执行OPERATION" 后执行,可触发自定义操作或修改响应结果。

后置普通钩子

postResolve 钩子在响应转换后执行,能拿到请求入参和响应结果,常用于消息通知。

后置修改出参钩子

mutatingPostResolve 钩子在响应转换后执行,能拿到请求入参和响应结果,也能修改响应结果。

nodejs钩子可以修改响应形状,golang钩子暂未支持。

模拟钩子

mockResolve 钩子在前置钩子后执行,可以用来模拟操作的响应。开启后,将跳过查询数据源,详情看 HTTP请求流程图

自定义钩子

customResolve 钩子在模拟钩子后执行。此钩子可用于用自定义OPERATION解析器替换默认解析器。

有两个逻辑:

  • 返回结构体:跳过执行OPERATION的逻辑,返回结构体

  • 返回NULL:继续执行OPERATION逻辑

注意看customResolve逻辑

最后更新于

这有帮助吗?