java接口在微服务中是能力承诺书,只声明行为(动宾方法名、dto参数/返回值)、不掺杂实现;须前置定义于common-api模块,统一复用并保障兼容性。

Java 接口在微服务架构中定义契约,核心是把它当作一份“能力承诺书”,而不是代码模板。它明确告诉调用方:我能做什么、输入什么、输出什么、失败时怎么报,但不透露我内部怎么做的。
接口即契约:只声明行为,不掺杂实现
一个契约接口只包含 public abstract 方法签名和常量,不写业务逻辑,也不放 private 字段或具体实现:
- ✅ 正确:定义 OrderPlacement.placeOrder(PlaceOrderRequest),返回 PlaceOrderResponse
- ❌ 错误:在接口里写 default void log(String msg) { ... } 或 private static final String PREFIX = "ORDER-";
- 方法名用动宾短语(如 reserveInventory、notifySuccess),体现明确业务动作
- 参数和返回值必须是具体 DTO 类,禁用 Map
或 JSONObject 这类弱类型
契约要前置定义,且统一复用
接口契约不能等代码写完再补,而应在开发启动前就定稿,并作为多端协作的唯一源头:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 把接口定义放在独立的 common-api 模块中,被提供方和服务消费者共同依赖
- 服务提供方的 Controller 实现该接口,对外暴露 REST;消费者用 Feign Client 继承同一接口发起远程调用
- 这样一套接口同时支撑 HTTP 入口 + RPC 调用,避免 URL、参数、DTO 不一致
- 契约文件(如 OpenAPI YAML)也应同步维护,与 Java 接口保持语义对齐
保障长期兼容:靠设计规则,不靠临时补丁
接口一旦发布,就是对下游的承诺。稳定不是靠“不敢改”,而是靠可验证的设计纪律:
- 新增字段必须设默认值或标记为 @Nullable,旧客户端不传也不报错
- 绝不删除或重命名已有字段;如需调整语义,新建接口(如 OrderPlacementV2)并走版本迁移路径
- 用 DTO 隔离内外模型,避免直接暴露领域实体或数据库对象
- 错误码、状态码、异常分类在接口 Javadoc 中写清,例如 “当库存不足时抛 InsufficientStockException”
命名与组织要体现业务意图
接口不是技术容器,而是业务语言的载体。名字和位置直接影响团队理解效率:
- 接口名用业务名词或动名词:PaymentProcessor、InventoryReservation,不用 OrderService 或 OrderImpl
- 包路径显式标识契约属性,例如 com.example.order.contract,不混入 impl 或 controller
- 一个接口只聚焦一个能力维度,避免“全能接口”;需要组合能力时,用 extends 多个细粒度接口
- 关键变更加 @since 1.2.0,废弃方法标 @Deprecated 并注明替代方案
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










