上云无忧 > 文档中心 > 腾讯云 API 网关插件 - 条件路由
腾讯云 API 网关插件 - 条件路由

文档简介:
操作场景: 条件路由插件可根据参数取值转发到不同后端。根据请求的参数取值与系统参数取值,按规则将不同的客户端请求转发到不同后端地址,可广泛应用于灰度发布、蓝绿发布、租户路由等场景。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

操作场景

条件路由插件可根据参数取值转发到不同后端。根据请求的参数取值与系统参数取值,按规则将不同的客户端请求转发到不同后端地址,可广泛应用于灰度发布、蓝绿发布、租户路由等场景。

操作步骤

步骤1:创建插件

1. 登录 API 网关控制台
2. 在左侧导航栏,单击插件 > 系统插件,进入系统插件列表页。
3. 单击列表左上角的新建,插件类型选择条件路由
在条件路由插件中,您可最多同时创建10条路由策略,每条策略需要输入的内容如下:
参数
是否必填
说明
策略名称
必填
本条策略的名称,最多50个字符,要求同一插件下不同策略间名称不能一样。
权重
必填
策略匹配的优先级,可输入0-100之间的正整数,不填默认是0。
权重越大匹配优先级越高,权重相同时按创建时间由新到旧的顺序来排优先级。
触发条件
必填
用于判断客户端请求是否符合条件,请输入条件表达式,详见本文条件表达式相关说明。
后端类型
必填
支持公网 URL/IP、内网CLB、后端通道、云函数SCF、Mock、微服务平台 TSF。
后端配置
必填
当客户端请求满足条件时将被转发到的后端,请输入 YAML 格式的后端配置。

步骤2:绑定 API 并生效

1. 系统插件列表中选中刚刚创建好的插件,单击操作列的绑定 API
2. 在绑定 API 弹窗中选择服务和环境,并选择需要绑定插件的 API。

3. 单击确定,即可将插件绑定到 API,此时插件的配置已经对 API 生效。

条件表达式写作指南

参数说明

条件表达式支持以下两种类型参数:
请求参数,目前支持 Header、Path、Query 参数。
您在 API 的前端配置中选择了 Header 位置、添加了参数名为 a 的参数,此时在插件中可以用 header.a 指代该参数。
Path 参数无参数名,因此使用 path 指代。例如:path='/test',即请求路径为 /test 时满足条件。
Path 参数的参数值定义需以'/'开头,如'/test'。
系统参数,目前可使用 sysparam 参数形式来引用当前请求的系统参数,系统参数不需要在 API 中被定义,可以直接引用。但如果您在 API 中定义了重名的参数,则取值会以您自定义的参数为准。系统参数推荐小驼峰写法,大小写不敏感。可用于条件路由插件的系统参数如下:
sysparam.clientIp:客户端 IP。
sysparam.httpScheme:请求的协议 HTTP、HTTPS。
sysparam.clientUa:客户端上传的 UserAgent 字段。
条件表达式支持以下常量类型:
常量类型
说明
示例
STRING
字符串类型
支持单引号或双引号,如:"Hello"、'hello'
INTEGER
整数类型
例如:1001、-1
NUMBER
浮点数类型
例如:0.1、100.0
BOOLEAN
布尔类型
例如:true、false

写作规则

1. 可以使用 and、or 来连接不同的表达式。
2. 可以用小括号 (,) 来指定条件判断的优先级。
3. Random() 作为内置函数,可以产生一个 0-1 的 NUMBER 浮点类型参数,用于随机的判断。
4. 如果表达式中使用了不存在的参数,例如 param.unknown = 1,则表达式的判断会返回 false。
5. 支持通过正则表达式函数 regex() 匹配参数值,例如 regex(query.name,"colou?r")。正则表达式字符串需要使用单引号或双引号。
6. exists() 函数来指代是否存在,例如 exists(header.Accept)
7. === 都可以用来判断“等于”关系。
8. not( ) 函数来判断“不等于”关系。例如 not(sysparam.clientIp == "120.110.10.199")

条件表达式示例

5%的几率为真: Random() < 0.05
自定义 Header 参数中的 UserName 是 Admin 且来源 IP 是47.47.74.77: header.UserName = 'Admin' and sysparam.clientIp = '47.47.74.77'
当前请求的用户 Id(Header参数)是1001,1098,2011中的一个,且使用 HTTPS 协议请求: sysparam.httpScheme = 'https' and (header.id = 1001 or header.id = 1098 or header.id = 2011)

后端配置写作指南

支持填写对接公网 URL/IP、内网 CLB、后端通道、云函数 SCF、Mock、微服务平台 TSF 的后端配置:
后端配置必须是 YAML 格式的内容。
字段与 创建API 接口中后端配置的字段一一对应。
创建条件路由插件页已经列出了各后端的配置代码 Demo,您只需要修改参数值,即可完成配置。

公网 URL/IP

		
ServiceType: HTTP
ServiceConfig:
Method: GET # 后端服务方法
Path: '/test' # 后端服务路径
Url: 'http://test.com' # 后端服务URL
ReserveReqHost: true #是否保留请求Host(默认为true)
ServiceTimeout: 15 # api后端超时时间(默认为15s)

内网CLB

		
ServiceType: HTTP
ServiceConfig:
Method: GET # 后端服务请求方法
Path: /test # 后端服务路径
Url: 'http://test.com' #后端服务URL
UniqVpcId: vpc-xxxxx # VPC 唯一ID
Product: clb # 标示后端为内网CLB资源(请保留)
ReserveReqHost: true #是否保留请求Host(默认为true)
ServiceTimeout: 15 # api后端超时时间(默认为15s)

后端通道

		
ServiceConfig:
Method: GET # 后端服务请求方法
Path: '/test' # 后端服务路径
Url: '' #后端服务URL
UniqVpcId: vpc-xxxxxx # VPC 唯一ID
UpstreamId: 'upstream-xxxxxx' # 后端通道唯一ID
Product: upstream # 标示后端为后端通道(请保留)
ReserveReqHost: true #是否保留请求Host(默认为true)
ServiceType: HTTP
ServiceTimeout: 15 # api后端超时时间(默认为15s)

后端对接云函数 SCF

		
ServiceType: SCF
ServiceScfFunctionName: scftest # SCF 函数名称
ServiceScfFunctionNamespace: mynamespace # SCF 函数命名空间
ServiceScfFunctionQualifier: $DEFAULT # SCF 函数版本
ServiceScfFunctionType: EVENT # SCF 函数类型
ServiceScfIsIntegratedResponse: false # 是否开启响应集成
ServiceTimeout: 15 # api后端超时时间(默认为15s)

后端对接 Mock

		
ServiceType: MOCK
ServiceMockReturnMessage: hello mock from strategy # 后端 Mock 返回信息

后端对接微服务平台 TSF

		
ServiceType: TSF
X-MicroService-Name: consumer-demo # 微服务名称
X-NameSpace-Code: mytsf # 微服务命名空间Code
MicroServices:
- ClusterId: cls-xxxxxx # 微服务集群ID
MicroServiceName: consumer-demo # 微服务名称
NamespaceId: namespace-xxxxxx # 微服务命名空间ID
ServiceConfig:
Method: ANY # 后端服务方法
Path: '/' # 后端服务路径
Url: '' # 后端服务URL
ServiceTsfHealthCheckConf:
IsHealthCheck: true # 是否开启健康检查
ServiceTsfLoadBalanceConf:
IsLoadBalance: true # 是否开启负载均衡
Method: RoundRobinRule # 负载均衡方式
SessionStickRequired: false # 是否开启会话保持
ServiceTimeout: 15 # api后端超时时间(默认为15s)

pluginData

		
[
{
"strategy_name":"route-to-http", // 策略名,最多50个字符,只能包含 A-Za-z0-9 / % ~ _ \-.{}?&= ,同一插件下策略名不允许重复
"strategy_weight":2, // 策略匹配的优先级,可输入0-100之间的正整数,不填默认是0
"condition":"query.age<30 and query.need_verify=false or query.level>3", // 条件表达式
"backend_type":"HTTP", // 路由转发后端类型,可选值:[MOCK, HTTP, SCF, VPC, UPSTREAM, TSF]
"backend_config":{ // 后端配置
"ServiceConfig":{
"Method":"GET",
"Path":"/v1/bpi/currentprice.json",
"Url":"https://api.coindesk.com"
},
"ServiceType":"HTTP"
}
}
]

注意事项

当请求无法匹配到 API 绑定的条件路由插件中配置的路由策略时,该请求将被转发到 API 默认的后端配置上去。
相似文档
  • 操作场景: 通过配置缓存插件,API 网关可存储后端应答,当遇到相同请求参数的请求时,API 网关将直接返回缓存的应答,无需转发到后端服务,以此达到降低后端的负荷,减少时延,增加平滑度的目的。
  • 操作场景: 如果 API 网关提供的认证鉴权方式不能满足您的需求,您可以使用自定义认证插件,通过您自定义的代码进行认证鉴权。 自定义认证插件作用在请求过程中,客户端请求 API 网关后,API 网关会将请求内容转发到认证函数中。您可以将认证函数部署在云函数上,公网、或内网 VPC 上,认证通过后请求才会被转发给业务后端,否则将拒绝请求。
  • 操作场景: 客户端发给业务后端的请求体中包含很多字段,如果您需要修改请求体内容,可以通过自定义请求体插件实现。
  • 操作场景: API 网关响应给客户端响应体中包含很多字段,如果您需要修改响应体内容,可以通过自定义响应体插件实现。
  • 操作场景: 防重放插件是 API 网关提供的针对重放攻击进行 API 保护的能力。您可以创建防重放插件并绑定到 API 生效,以保护您的后端服务。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部