# 路由介绍

路由为内部微服务提供统一的对外入口,用于接收外部请求并转发到对应的后端服务。路由可分为以下三大类型

  • 服务编排:把请求转发到通过服务编排模块配置出来的接口,选择服务名即可不用配置实例的IP和端口
  • 服务发现:把请求转发到注册到服务注册中心的微服务,选择服务名即可不用配置实例的IP和端口
  • 代理转发:把请求转发到无注册中心的服务,需要配置后端服务的实例IP和端口

路由支持以下功能:

  • 支持服务注册中心
  • 支持负载均衡
  • 支持配置调用方
  • 支持内置的key-auth, JWT, basic-auth等鉴权方式
  • 支持配置插件
  • 支持匹配正则表达式
  • 支持路径测试,校验配置的路由是否正确
  • 支持配置禁止访问的路由

# 配置路由

新增路由,填写基础信息

根据情况添加路由需要的插件,如:通过此路由的所有请求需要进行HTTP Basic认证和JWT校验,则添加以下插件。除内置插件外,也可添加自定义插件,自定义插件请参考插件机制章节文档。

配置好路由后,如果前后端的匹配规则比较复杂(如:使用了正则表达式或通配符),可以使用测试功能来检验一下配置是否正确

# API路径匹配规则

API路径匹配规则说明:

? 匹配一个字符

* 匹配一级目录内的0个或多个字符

** 匹配0级或多级目录

{fizz:[a-z]+} 匹配正则表达式 [a-z]+,匹配结果赋值给名为fizz的路径变量

后端API路径可以通过{$1}-{$n}来获取前端API路径中通配符和正则表达式的值,正则表达式的值也可以通过命名变量来获取;

例子:

前端API路径: /x/{fizz:[a-z]+}/z/**

后端API路径: /x/{fizz}/{$2} 或 /x/{$1}/{$2}

此例中 {fizz} 和{$1} 取的都是前端API路径中正则表达式{fizz:[a-z]+}的值

当请求接口路径/x/y/z/a/b/c时,会匹配到上面的路由,{fizz} 和{$1}的值为y, {$2}的值为a/b/c

# 启用APPID

路由支持配置APPID来限制调用方,启用APPID后调用方需按要求传输以下请求头

  • fizz-appid APPID管理模块里维护的调用方ID
  • fizz-sign APPID管理模块里设置的APPID对应的验签方式
  • fizz-ts 请求时的时间戳

样例:

fizz-appid: 10001
fizz-sign: e4502ba3a71448bbbcecef22b305d2ba
fizz-ts: 1605255335977

# 自定义备用签名头

fizz-appid,fizz-sign和fizz-ts为默认的验符请求头,支持自定义可配置的备用签名头,当默认请求头没有值时取备用请求头的值

在application.yml里添加以下配置, 可以只配置其中一部分备用请求头,其它使用默认请求头。

custom.header.appid=app-id,gw-appid  # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值
custom.header.sign=signature # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值
custom.header.ts=timestamp # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值