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

如何让XML Payload支持SOAP与RESTful多请求复用?

如何让XML Payload被SOAP和REST请求共同引用

当然可以实现,核心思路是把原始XML Payload抽离为单一共享数据源,SOAP和REST请求各自基于这个数据源做格式转换(CDATA包裹/Base64编码),这样只需修改一次原始XML,就能同步更新两个请求的内容。以下分两种场景给出具体实现方案:

一、API测试工具场景(如Postman、Insomnia)

Postman实现步骤

  1. 创建共享变量:进入Postman的「环境」面板,添加一个环境变量(比如命名为rawXmlPayload),将原始XML内容填入变量值。
  2. SOAP请求配置:在SOAP请求体的对应位置,直接引用该变量并包裹进CDATA:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" >
  <soap:Header/>
  <soap:Body>
    <someOperation>
      <someProperty/>
      <someOtherproperty/>
      <etc/>
      <Data><![CDATA[{{rawXmlPayload}}]]></Data>
    </someOperation>
  </soap:Body>
</soap:Envelope>
  1. REST请求配置:
    • 打开请求的「Pre-request Script」标签,添加编码脚本:
      // 读取原始XML变量并做Base64编码
      const rawXml = pm.environment.get("rawXmlPayload");
      const base64Encoded = btoa(rawXml);
      // 将编码后的值存入新变量
      pm.environment.set("encodedXmlPayload", base64Encoded);
      
    • 在REST请求体中引用编码后的变量:
      {
          "myProperty": "...",
          "myOtherProperty": "...",
          "etc": "...",
          "content": "{{encodedXmlPayload}}"
      }
      

Insomnia实现步骤

  1. 创建环境变量:在Insomnia的环境配置中添加rawXmlPayload变量,存入原始XML。
  2. SOAP请求:用模板语法引用变量并包裹CDATA,写法和Postman类似:{{rawXmlPayload}}放在CDATA标签内。
  3. REST请求:在请求的「Pre-Run Script」中添加编码逻辑:
    const rawXml = context.environment.get('rawXmlPayload');
    const encoded = btoa(rawXml);
    context.environment.set('encodedXmlPayload', encoded);
    
    然后在请求体中引用{{encodedXmlPayload}}即可。

二、代码开发场景

Java实现

  1. 定义共享数据源:将原始XML抽离为常量或配置项:
public class XmlConfig {
    // 原始XML Payload,仅需在此处修改
    public static final String RAW_XML = "<thatXmlPayload>a few thousand lines</thatXmlPayload>";
}
  1. 构建SOAP请求:将原始XML包裹进CDATA后插入SOAP信封:
String soapRequest = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" >"
        + "<soap:Header/>"
        + "<soap:Body>"
        + "<someOperation>"
        + "<Data><![CDATA[" + XmlConfig.RAW_XML + "]]></Data>"
        + "</someOperation>"
        + "</soap:Body>"
        + "</soap:Envelope>";
  1. 构建REST请求:对原始XML做Base64编码后组装JSON请求体:
import java.util.Base64;
import com.fasterxml.jackson.databind.ObjectMapper;

// 编码XML
String encodedXml = Base64.getEncoder().encodeToString(XmlConfig.RAW_XML.getBytes());

// 组装JSON请求体
RestPayload payload = new RestPayload();
payload.setContent(encodedXml);
// 转JSON字符串
String restRequest = new ObjectMapper().writeValueAsString(payload);

Python实现

  1. 定义共享数据源:
# 原始XML Payload,仅需在此处修改
RAW_XML = "<thatXmlPayload>a few thousand lines</thatXmlPayload>"
  1. 构建SOAP请求:用f-string将XML插入CDATA:
soap_request = f"""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" >
  <soap:Header/>
  <soap:Body>
    <someOperation>
      <Data><![CDATA[{RAW_XML}]]></Data>
    </someOperation>
  </soap:Body>
</soap:Envelope>"""
  1. 构建REST请求:用base64模块编码后组装请求体:
import base64
import requests

# 编码XML
encoded_xml = base64.b64encode(RAW_XML.encode('utf-8')).decode('utf-8')

# 组装并发送REST请求
rest_payload = {
    "myProperty": "...",
    "content": encoded_xml
}
response = requests.post("https://your-rest-api-url.com", json=rest_payload)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:12:46