用途:当需要向 Speakeasy 生成的 SDK 添加自定义代码逻辑时使用本技能,例如为每个请求添加自定义请求头(User-Agent、关联 ID)、在 SDK 层实现遥测/日志/可观测性、加入 OpenAPI 规范无法表达的自定义认证(HMAC 签名、令牌刷新)、在响应或错误到达调用方前进行转换,以及实现自定义请求/响应中间件。它不用于修改 OpenAPI 规范(应使用 overlay)或运行时 SDK 客户端配置。
主要能力:提供五类生命周期钩子——SDKInitHook(客户端初始化,配置默认值、校验配置、设置 base URL)、BeforeCreateRequestHook(创建 HTTP 请求对象前修改输入参数)、BeforeRequestHook(发送前添加请求头、日志、遥测、签名)、AfterSuccessHook(成功响应后转换响应、记录指标)、AfterErrorHook(错误响应后转换错误、重试、记录日志)。钩子实现放在 src/hooks/ 下,并在 src/hooks/registration.ts 的 initHooks 中注册;registration.ts 与自定义钩子文件在 SDK 重新生成时会被保留,types.ts 会被重新生成,不应修改。
使用方式:在 src/hooks/ 创建钩子实现文件,实现 types.ts 中对应接口,在 registration.ts 注册,然后重新生成 SDK,例如:speakeasy generate sdk -s openapi.yaml -o . -l typescript。
适用场景:自定义 User-Agent、HMAC 签名等认证、遥测与日志、响应/错误转换。
限制与注意:不要编辑 types.ts;读取响应体前必须先 clone,否则流会被耗尽;不要在钩子中执行阻塞 I/O;不要在 AfterSuccessHook 中随意抛错;多线程环境下避免无同步的可变共享状态;属于规范修改的逻辑应使用 overlay 而非钩子。钩子类型与注册模式在各支持语言(Go、Python、Java、C#、Ruby、PHP 等)中保持一致,具体接口以生成的类型文件为准。