钩子规范
钩子服务本质上是一个实现了飞布钩子规范的WEB服务,可以用任意后端语言实现。
如果你希望实现其他语言的 hook SDK,需要遵从如下协议。
搭建一个可以提供Rest服务的项目
常用的编程语言实现动态注册HTTP对外访问的框架有很多,比如:
Java:Spring Boot、Spring Cloud、JAX-RS、Vert.x等;
Python:Flask、Django、Tornado、FastAPI等;
Go:Gin、Echo、Beego等;
Node.js:Express、Koa、Hapi等。
Ruby:Ruby on Rails、Sinatra、Roda等;
PHP:Laravel、Symfony、Slim等;
Rust:Rocket、Actix-web等;
Kotlin:Ktor、Spring Boot等;
Swift:Vapor、Kitura等。
这些框架都提供了丰富的功能和插件,可以方便地实现HTTP对外访问。通常来说,这些框架都支持动态注册路由和中间件,可以根据不同的URL和HTTP方法,将请求路由到相应的处理函数,从而实现动态注册HTTP对外访问。使用这些框架可以很好地提高开发效率和代码质量。
熟悉并使用handlerbars语法生成代码 客户端SDK
生成钩子函数时建议使用对应语言的范型来约束出入参
模版生成最终应该包含
钩子函数出入参的对象/结构体定义,用来约束类型
全局钩子,用来 #zhu-ce-quan-ju-gou-zi
认证钩子,用来 #zhu-ce-ren-zheng-gou-zi
查询钩子,用来 #zhu-ce-operation-gou-zi中查询类型的钩子
变更钩子,用来 #zhu-ce-operation-gou-zi中变更类型的钩子
订阅钩子,用来 #zhu-ce-operation-gou-zi中订阅类型的钩子(暂时未支持调用)
上传钩子,用来 #zhu-ce-shang-chuan-gou-zi
graphql配置,用来 #zhu-ce-graphql-fu-wu
建议最终生成的对象按照key-value的格式
全局钩子,value为注册函数${function},key为
认证钩子,value为注册函数${function},key为
operation钩子,key为${operationPath}, value为
上传钩子,key为${provider},value为
graphql配置,主要包含以下信息
${function}为各个创建的不同目录下的文件,其中包含可执行函数,例如
全局钩子文件global/beforeRequest.(go/java/py/ts等)
认证钩子文件authentication/postAuthentication.(go/java/py/ts等)
operation钩子hooks/${operationPath}/postResolve.(go/java/py/ts等)
上传钩子uploads/${provider}/${profile}/preUpload.(go/java/py/ts等)
${function}最终需要注册到各个的接口时使用,最终流程为:
解析飞布生成的json配置文件
文件路径${钩子项目目录}/generated/fireboom.config.json
文件内容示例如下:
api.operations[*].path用来过滤 #shou-xi-bing-shi-yong-handlerbars-yu-fa-sheng-cheng-dai-ma生成的operation钩子函数
api.s3UploadConfiguration.name和api.s3UploadConfiguration.uploadProfiles.*用来过滤 #shou-xi-bing-shi-yong-handlerbars-yu-fa-sheng-cheng-dai-ma生成的上传钩子函数
api.serverOptions.listen.port用来指定钩子服务启动端口号
api.nodeOptions.nodeUrl用来 #gou-jian-internalclient指定baseNodeUrl
解析全局参数
所有的钩子请求都是POST请求,并且Content-Type=application/json
解析参数"__wg",json结构如下(请dump body数据,防止后续请求使用body因为流关闭导致异常)
构建internalClient #gou-jian-internalclient
将全局参数和internalClient传递到后续请求中,方便后续钩子函数直接访问
全局错误统一处理,返回json格式如下
最后更新于