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

如何在WSO2 Integration Studio中通过Synapse链式调用多个API?

WSO2 Synapse 链式HTTP API调用实现指引(适配Integration Studio 8.1.0 + APIM 4.1.0)

核心序列结构构建

基础链式调用模板

通过Synapse的<sequence>结合<call>、<property>、<payloadFactory>组件实现,核心结构示例如下:

<sequence name="ChainedAPICallSequence" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
    <!-- 第一步:调用第一个API -->
    <call>
        <endpoint>
            <http method="GET" uri-template="https://first-api.example.com/data"/>
        </endpoint>
    </call>
    <!-- 提取第一个API响应的关键数据(XML格式示例) -->
    <property name="FirstAPIResponseId" expression="//id" scope="default" type="STRING"/>
    <!-- 第二步:调用依赖第一个API的第二个API -->
    <call>
        <endpoint>
            <http method="GET" uri-template="https://second-api.example.com/details/{$ctx:FirstAPIResponseId}"/>
        </endpoint>
    </call>
    <!-- 提取第二个API响应数据,用于后续调用或返回 -->
    <property name="SecondAPIData" expression="//details" scope="default" type="OM"/>
    <!-- 可选:添加更多链式调用步骤,重复上述流程 -->
    <!-- ... -->
    <!-- 返回最终处理结果 -->
    <respond/>
</sequence>

关键组件说明

  • <call>:同步调用外部HTTP API,默认阻塞等待响应,完全适配链式依赖场景
  • <property>:通过XPath(XML响应)或JSONPath(JSON响应)提取响应数据,存入上下文(ctx)供后续调用使用
  • 若处理JSON响应,需先设置消息类型:<property name="messageType" value="application/json" scope="axis2"/>,再用JSONPath表达式(如expression="json-eval($.id)")提取数据

最佳实践

  • 错误处理:为每个<call>绑定<faultSequence>,处理API调用失败(超时、错误码等)场景:
    <call faultSequence="APIErrorHandler">
        <!-- 端点配置 -->
    </call>
    
    错误处理序列示例:
    <sequence name="APIErrorHandler" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
        <property name="ERROR_MESSAGE" expression="$ctx:ERROR_MESSAGE" scope="default"/>
        <payloadFactory media-type="json">
            <format>{"error": "$1"}</format>
            <args>
                <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/>
            </args>
        </payloadFactory>
        <property name="HTTP_SC" value="500" scope="axis2"/>
        <respond/>
    </sequence>
    
  • 上下文数据管理:临时数据优先使用local scope,避免default scope的上下文污染
  • 参数验证:调用前校验依赖参数的有效性,避免无效API请求:
    <filter source="$ctx:FirstAPIResponseId" regex=".+" description="CheckFirstAPIId">
        <then>
            <!-- 执行后续链式调用 -->
        </then>
        <else>
            <payloadFactory media-type="json">
                <format>{"error": "Missing required parameter from first API"}</format>
            </payloadFactory>
            <property name="HTTP_SC" value="400" scope="axis2"/>
            <respond/>
        </else>
    </filter>
    
  • 性能优化:链式场景下优先用同步<call>,无依赖的并行调用可考虑<callout>异步执行

实用扩展示例(JSON响应场景)

<sequence name="JSONChainedSequence" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
    <!-- 调用登录API(JSON请求/响应) -->
    <property name="messageType" value="application/json" scope="axis2"/>
    <call>
        <endpoint>
            <http method="POST" uri-template="https://user-api.example.com/login">
                <suspendOnFailure>
                    <initialDuration>-1</initialDuration>
                    <progressionFactor>1.0</progressionFactor>
                </suspendOnFailure>
                <markForSuspension>
                    <retriesBeforeSuspension>3</retriesBeforeSuspension>
                </markForSuspension>
            </http>
        </endpoint>
    </call>
    <!-- 提取登录返回的token -->
    <property name="AuthToken" expression="json-eval($.access_token)" scope="default" type="STRING"/>
    <!-- 调用需要token鉴权的订单API -->
    <header name="Authorization" expression="fn:concat('Bearer ', $ctx:AuthToken)"/>
    <call>
        <endpoint>
            <http method="GET" uri-template="https://order-api.example.com/user/orders"/>
        </endpoint>
    </call>
    <!-- 返回最终订单数据 -->
    <respond/>
</sequence>

内置参考资源

在WSO2 Integration Studio中可直接获取官方示例:

  • 进入Examples -> Synapse Examples -> HTTP Call Examples
  • 导入Sequence with Call Mediator示例,可直接修改适配自身业务场景

内容的提问来源于stack exchange,提问作者mohamed hamada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:31