You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于URL中的代理代码(agencycode)实现API管理后端路由策略

基于URL中的代理代码(agencycode)实现API管理后端路由策略

我来帮你一步步拆解怎么在API Management里实现这个需求,刚好之前我配置过类似的场景,上手很简单:

先理清楚核心需求细节

  • 你的请求URL格式是 http://tst.my.api.identity.xxx.com/int/my/v1/{AGENCYCODE}/system/ping
  • APIM里的API后缀是 int/my/v1,需要从URL里精准提取中间的{AGENCYCODE}值
  • 要根据提取到的agencycode,把请求转发到对应的后端服务,同时重写请求路径,让后端收到的是/system/ping这类不含agencycode的路径

核心实现思路

咱们可以用APIM的入站策略组合来搞定:先提取agencycode变量,再根据这个变量匹配对应后端,最后重写请求路径。完全可以基于你提到的负载均衡策略思路改造,核心是用set-variable提取值、choose做分支路由、rewrite-uri调整路径。

完整的策略配置示例

把这段配置放到你的API的入站策略里就行,每部分我都加了注释:

<policies>
    <inbound>
        <base />
        <!-- 第一步:从URL路径中提取agencycode -->
        <set-variable name="agencyCode" value="@(
            // 把请求路径拆分成数组,比如路径是/int/my/v1/abc123/system/ping,拆分后得到各段
            var pathSegments = context.Request.Url.Path.Split('/').Where(s => !string.IsNullOrEmpty(s)).ToArray();
            // 取第4段(数组从0开始计数:int是0,my是1,v1是2,abc123是3)
            pathSegments.Length >=4 ? pathSegments[3] : string.Empty
        )" />

        <!-- 第二步:根据agencycode匹配对应的后端服务 -->
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<string>("agencyCode") == "AGENCY1")">
                <set-backend-service backend-id="backend-agency1" />
            </when>
            <when condition="@(context.Variables.GetValueOrDefault<string>("agencyCode") == "AGENCY2")">
                <set-backend-service backend-id="backend-agency2" />
            </when>
            <!-- 可以继续添加更多agency的匹配规则 -->
            <otherwise>
                <!-- 没有匹配到agencycode时,设置默认后端或返回错误 -->
                <set-backend-service backend-id="backend-default" />
                <!-- 也可以直接返回错误:<return-response><set-status code="404" reason="Agency code not found" /></return-response> -->
            </otherwise>
        </choose>

        <!-- 第三步:重写请求路径,移除agencycode部分,转发给后端 -->
        <rewrite-uri template="@(
            var pathSegments = context.Request.Url.Path.Split('/').Where(s => !string.IsNullOrEmpty(s)).ToArray();
            if(pathSegments.Length >=5)
            {
                // 保留agencycode之后的路径部分,比如从/system/ping开始
                return "/" + string.Join("/", pathSegments.Skip(4));
            }
            // 路径不符合预期时,返回原路径做保底
            return context.Request.Url.Path
        )" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

几个关键细节要注意

  1. 提取逻辑校验:这里的路径分段索引是根据你的URL结构来的,要是后续API后缀有调整,记得对应修改索引值,不然会提错agencycode。
  2. 后端提前配置:你得先在APIM里创建好各个agency对应的后端服务,策略里的backend-id要和你创建的后端名称完全一致,不然会匹配失败。
  3. 异常场景处理:otherwise分支里的默认后端或者错误返回,可以根据你的业务需求调整,比如有些场景下需要拦截无匹配的请求,直接返回400错误。

备注:内容来源于stack exchange,提问作者Riccardo79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 07:48:02