一、核心结论
- 接口文档里的路径都是真实业务路径 :
/api/v1/xxx,不带/wemedia、/user这类网关标识。 - 服务自己的 Controller 只写业务路径 :
/api/v1/xxx,保持纯净、独立、可直接测试。 - Feign 调用 = 目标服务真实路径,完全一致,不带任何网关前缀。
- 前端访问带的
/wemedia//user是网关路由标识,由网关配置决定是否剥离。
二、两种网关配置对比(最关键)
1)带 StripPrefix=1(以 wemedia 为例)
- id: wemedia
uri: lb://leadnews-wemedia
predicates: Path=/wemedia/**
filters: StripPrefix=1
- StripPrefix=1:转发时自动去掉第一个路径段
/wemedia - 前端请求:
/wemedia/api/v1/channel/list - 网关转发后:
/api/v1/channel/list - wemedia 真实接口:
/api/v1/channel - admin 要调用它,必须写完整带前缀路径:
/wemedia/api/v1/channel
2)不带 StripPrefix(以 user/auth 为例)
- id: admin-user-auth
uri: lb://leadnews-admin
predicates: Path=/user/api/v1/auth/**
- 无 StripPrefix:路径原样转发,不剥离
- 前端请求:
/user/api/v1/auth/list - 网关直接转给 admin:
/user/api/v1/auth/list - admin 接口必须写:
/user/api/v1/auth - admin 通过 Feign 调用 user 真实接口:
/api/v1/auth
三、为什么 admin 要多写一层前缀?
- admin 是后台统一入口,接收前端网关路由过来的完整路径
- 权限、日志、统一格式都在 admin 控制
- 再通过 Feign 调用目标服务的纯净业务接口
- 结构清晰、职责分离、后期极好处维护
四、最终三层路径规则(背会就不会错)
- 前端 → 网关 :带标识
/wemedia/xxx、/user/xxx - 网关 → admin:按配置决定是否剥离前缀
- admin → Feign → 目标服务 :只用纯净业务路径
/api/v1/xxx