写了个 IDEA 插件,把项目里的 REST 接口都拍平摆在一个面板里

发布时间:2026/10/29 2:08:05
写了个 IDEA 插件,把项目里的 REST 接口都拍平摆在一个面板里 前言以前写别的语言的时候就用过这类接口浏览插件一直觉得挺好用的。项目一旦做大了接口这东西是真的多新老接口混在一起光凭记忆去代码里翻根本翻不过来——尤其是那种大仓库你可能只隐约记得这个接口跟 user 相关具体叫什么、在哪个类里完全靠猜很难精确定位。IDE 自带的全局搜索其实也帮不上太大忙因为接口路径里的/很容易被当成分隔符处理没法拿一整段做连续匹配。最典型的场景是从 Chrome 的 Network 面板里直接复制一个完整接口路径比如/api/v1/user/detail/list往全局搜索框里一贴根本搜不出东西只能把这段路径拆开一个词一个词去试很不方便。这个对后端同学尤其致命——接口是整条数据链路的入口从这里进来一路往下追到 Service、Repository最后落到 DB看的就是这条完整链路入口都找不准后面全白搭。真正让我下决心自己写一个的是另外几件事。第一是随着 IDEA 版本不停更新之前用得好好的那几个插件陆续都不兼容了隔一段时间就要重新去找替代品这个折腾本身就很烦。第二是找替代品的过程中翻了不少同类插件发现里面塞了一堆用不上的臃肿功能——倒不是说这些功能不好别人的产品思路我理解也尊重只是不是我要的东西。第三也是最直接的一个最近 Python 写得越来越多翻遍市面上这类插件几乎清一色只认 Java 系框架的 Controller 注解FastAPI 完全没人管可后端用 Python 写接口这个量一点不比 Java 少。于是干脆自己写一个先把 Java 系框架和 FastAPI 都覆盖上尽量守住只做接口浏览跳转这一个单一职责不去堆砌用不上的功能。如果有其他语言/框架的诉求欢迎直接提 PR大家一起测一起把这块拼图补全。正文先划清楚这一版做什么、不做什么翻了下 RestfulBox 的截图发现它野心更大一点还带了发请求、看返回结果的面板有点 Postman 内嵌进 IDE 的意思。这个我没打算跟——一是这块功能复杂度不低二是发请求这事本来就有专门的工具在做没必要在 IDE 插件里重造一遍也正好符合前面说的不想做臃肿的想法。这一版就死磕浏览 跳转这一个场景扫出所有接口选中一个直接跳到代码里够了。架构一个扩展点吃遍四种框架核心是抽了一个ApiParserContributor扩展点接口每种框架各自实现一个interfaceApiParserContributor{funcollect(project:Project,scope:GlobalSearchScope):ListApiEndpoint}Spring、JAX-RS、Micronaut 这几个 Java 系框架的注解识别逻辑没有从零造轮子——直接移植改造自 RestfulHelperMIT 协议开源包括它那套处理字符串拼接、常量引用的健壮值提取逻辑改造之后统一适配成本项目自己的ApiEndpoint模型licence 和署名都在 NOTICE 里保留好了。FastAPI 这块是新写的基于 Python PSI 去解析app.get(...)、APIRouter(prefix...)和include_router的路径拼接。Python 支持这块用了一个小技巧plugin.xml里用depends optionaltruecom.intellij.modules.python/depends声明依赖这样没装 JetBrains 官方 Python 插件的用户装这个插件也不会报错就是看不到 FastAPI 的接口而已其余框架照常工作。UI 这层完全不关心接口是哪个框架来的只认ListApiEndpoint工具窗口里可以按路径前缀、方法、文件/类、模块四个维度切换分组还有个搜索框实时过滤。踩的一个坑全量扫描堵死了 UI 线程开发过程里冒出来一个挺典型的 IDEA 插件坑一开始筛选框每敲一个字是直接同步调用所有 parser contributor 重新跑一遍全项目扫描然后在 EDTUI 主线程上等结果。项目小的时候感觉不出来一旦接口数量上去了输入的时候界面直接卡一下体验很差本质上是把重的索引访问放到了不该放的线程上。后来改成了非阻塞的异步刷新项目扫描结果统一缓存在一个 project 级的 service 里PSI 变更时只增量重新扫受影响的文件而不是全量重扫搜索和切换分组都只在内存里的缓存快照上做不再碰索引。顺手还发现并修了个关联的小问题——刷新失败或者被取消的时候缓存状态之前会被错误地标记成干净导致该重扫的时候反而不重扫了。全局跳转和设置页除了工具窗口里的树状列表还做了一个全局快捷键CmdOption\/Ctrl\唤起的模糊搜索弹窗输入路径片段或者方法名就能直接定位并跳转不用先手动点开工具窗口再去找。这里也有个小坑不同操作系统、不同用户自定义的 Keymap实际生效的快捷键都可能不一样如果写死一个提示文案是会误导人的。所以做了个专门的设置页Settings → Tools → RestfulController读的是当前生效的 Keymap展示的是用户实际能按出来的那个快捷键而不是一个写死的默认值页面上还能直接改快捷键、调整弹窗是出现在屏幕正中间还是跟着鼠标走改完直接写回 IDE 自己的 Keymap跟Settings → Keymap里看到的是同一份数据不会出现插件自己存一份、跟系统不一致的情况。设置页读取当前生效的 Keymap展示的是用户实际能按出来的快捷键弹窗位置也能在这调工具窗口里所有接口按选定的维度分组展示支持实时搜索过滤全局快捷键唤起模糊搜索输完路径片段直接回车跳到对应的处理方法开发过程写着写着换了个人接着写这个插件是彻底靠 AI 辅助写完的而且中间还接力换过几次人。最早是拿另一个 AI 编程工具起的头定了设计和第一版实现写到一半那边的 session 上下文用得差不多了我就把交接的会话记录甩给 Claude 接着写Claude 又往前推了一大截——四个框架的解析器、工具窗口、全局搜索这些主体功能基本都是这段搞定的。结果写着写着 Claude 这边的 token 也到期了干脆又换成 Codex 接着收尾把设置页、异步刷新、快捷键这些体验细节补完顺手还做了一遍性能和架构的自查就是上面那个 EDT 卡顿的坑是这一轮自查出来的。一开始还担心几个不同的 AI 接力写同一个项目会不会写出风格割裂的代码实际做下来发现问题不大——只要设计文档和实现计划留得足够清楚交接的时候把这些文档甩过去新接手的 AI 很快就能对齐上下文继续干活人在中间主要是把控方向、跑测试、抓一下明显不对劲的地方。后言现在插件已经跑起来了代码开源在 github.com/oreoft/restful-controller。整体感受是做一个覆盖多框架的 IDE 小工具难点其实不在某一个框架的解析细节上这块很多都能从开源项目里借鉴而在于把扩展点设计得足够干净——新增一个框架不该动到 UI 和其他解析器的代码。这一点这次算是拿捏住了。后续应该还会根据自己实际用的时候踩到的别扭点慢慢打磨暂时没有再往发请求这个方向去扩的打算浏览加跳转这个场景对我来说已经解决了最烦的那个问题。至于其他语言的支持还是那句话等你的 PR。原文地址https://www.someget.cn/tools/2026/07/30/restful-controller-idea-plugin.html

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询