You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用http4k的旧Kotlin应用如何自动爬取获取所有暴露的routes?

http4k应用路由自动采集与文档生成方案

核心实现逻辑

http4k的Routes类型本身是可遍历的树结构,不需要爬取运行中的服务,也不需要手动补充OpenAPI注解,直接在编译或启动阶段静态遍历所有模块暴露的路由根节点,就能拿到全量路由信息。

具体实现步骤

  • 聚合全量路由根节点
    先把各独立模块对外暴露的routes实例统一聚合到同一个集合中,比如定义全局变量allModulesRoutes: List<Routes>,把所有模块的路由根节点全部加入该集合。
  • 递归遍历路由树提取接口信息
    利用Routes自带的迭代能力递归遍历嵌套路由,直接提取每个接口的请求方法、路径模板、描述等信息,参考代码如下:
    import org.http4k.core.Method
    import org.http4k.routing.Routed
    import org.http4k.routing.Routes
    
    // 路由信息结构体,可根据需要扩展字段
    data class RouteInfo(
        val method: Method,
        val fullPath: String,
        val description: String? = null
    )
    
    fun collectRoutes(routes: Routes, parentPath: String = ""): List<RouteInfo> {
        return routes.flatMap { handler ->
            when (handler) {
                // 叶子节点为实际暴露的接口
                is Routed -> listOf(RouteInfo(handler.method, parentPath + handler.path, handler.description))
                // 嵌套路由递归处理
                is Routes -> collectRoutes(handler, parentPath)
                else -> emptyList()
            }
        }
    }
    
    // 调用示例,输出全量路由列表
    val allRoutes = allModulesRoutes.flatMap { collectRoutes(it) }
    
  • 导出类OpenAPI格式文档
    拿到全量RouteInfo列表后,可直接按照OpenAPI的Schema结构生成JSON或YAML文件,基础的路径、请求方法字段可直接填充,如果原有路由定义了description也可以直接带入文档。
  • 集成到工作流
    可以把路由采集逻辑做成独立启动参数,比如应用启动时传入--export-routes就自动生成并导出文档,也可以集成到CI流水线中,每次构建自动生成最新的路由文档,无需人工维护。

优化建议

  • 如果需要补充请求/响应结构信息,可配合http4k自带的Contract路由定义,原有路由不需要大面积修改,仅给接口补充请求响应的Lens定义,采集时就能自动拿到参数、返回体结构,生成的文档完整度和手动编写的OpenAPI一致。
  • 没有加Contract定义的老接口,也可以通过反射读取处理器的输入输出类型,补全文档字段。

内容的提问来源于stack exchange,提问作者Rohit Sachan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:15:03