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 钩子在响应转换后执行,能拿到请求入参和响应结果,也能修改响应结果,且可以修改响应的结构

模拟钩子

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

自定义钩子

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

有两个逻辑:

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

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

注意看customResolve逻辑

最后更新于

这有帮助吗?