kayki
一个非常好的问题。可以试试如下方法:
1,第三方api,使用nginx代理转发
Nginx配置路由转发时,重新拼接路径和参数。
2,自己开发的api,使用url变量,或者在请求参数中增加路由信息
1)路径中包含参数,比如url/{name},Java开发时可以使用@PathVariable读取
2)请求体参数中包含路由信息,解析得到后,实现判断逻辑
急速马力快de源码控
一个外部接口如何统一API地址,这个问题其实是接口网关如何设计。
接口网关的整体架构如下图一所示。
那API-Center对外提供的API地址如何设计呢?
通常的设计方案为 https://${domain}/api-gatway?interface=${interface}
例如上述图中,内部服务包含了订单域,账户域、支付域等业务域,各自定义众多的Dubbo服务接口。
那接口网关如何设计呢?其实就是建立接口映射机制,即类似如下(为了显示更有好,省略了dubbo服务的包名)
interface Dubbo Service
api-createOrder OrderService#createOrder
api-updateOrder OrderService#createOrder
这样对于接口网关的使用方,传入的接口名称为 api-createOrder,但经过网关的转发就能调用到内部的接口。
当然接口网关的设计通常还需包含如下几个设计要点:
1、签名验证
2、协议转换(http接口参数与Dubbo参数映射、返回结果映射)
3、服务发现
4、限流、降级
巅峰架构思维
你可能是分布式服务,每个服务在不同的机器上。你可以使用nginx统一对外代理。
如果JAVA的话,springcloud的话,有spring cloud gateway。