tencent cloud

文档反馈

条件路由

最后更新时间:2023-12-22 10:00:28

    操作场景

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

    操作步骤

    步骤1:创建插件

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

    步骤2:绑定 API 并生效

    1. 在列表中选中刚刚创建好的插件,单击操作列的绑定 API
    2. 在绑定 API 弹窗中选择服务和环境,并选择需要绑定插件的 API。
    
    
    
    3. 单击确定,即可将插件绑定到 API,此时插件的配置已经对 API 生效。

    条件表达式写作指南

    参数说明

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

    写作规则

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

    条件表达式示例

    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、VPC 内资源、云函数 SCF、Mock、微服务平台 TSF 的后端配置:
    后端配置必须是 YAML 格式的内容。
    字段与 创建API 接口中后端配置的字段一一对应。
    创建条件路由插件页已经列出了各后端的配置代码 Demo,您只需要修改参数值,即可完成配置。

    后端对接公网 URL/IP

    ServiceConfig:
    Method: GET
    Path: /test
    Url: 'http://test.com'
    ServiceType: HTTP

    后端对接 VPC 内资源

    ServiceConfig:
    Method: GET
    Path: /test
    Url: 'http://test.com'
    UniqVpcId: vpc-xxxxx
    Product: clb
    ServiceType: HTTP

    后端对接云函数 SCF

    ServiceScfFunctionName: scftest
    ServiceScfFunctionNamespace: mynamespace
    ServiceScfFunctionQualifier: $DEFAULT
    ServiceScfFunctionType: EVENT
    ServiceScfIsIntegratedResponse: false
    ServiceType: SCF

    后端对接 Mock

    ServiceMockReturnMessage: hello mock from strategy
    ServiceType: MOCK

    后端对接微服务平台 TSF

    X-MicroService-Name: consumer-demo
    X-NameSpace-Code: mytsf
    MicroServices:
    - ClusterId: cls-xxxxxx
    MicroServiceName: tsf-demo
    NamespaceId: namespace-xxxxxx
    ServiceConfig:
    Method: ANY
    Path: /xxxx
    Url: ''
    ServiceTsfHealthCheckConf:
    IsHealthCheck: true
    ServiceTsfLoadBalanceConf:
    IsLoadBalance: true
    Method: RoundRobinRule
    SessionStickRequired: false
    ServiceType: TSF

    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 默认的后端配置上去。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持