跳到主要内容

soap

soap 插件将 JSON 请求转换为 Web 服务描述语言(WSDL)文档中定义的 SOAP 操作。它还会在向客户端返回响应前,将 SOAP 响应转换为 JSON。

插件将 WSDL 解析和协议转换委托给 soap-proxy,每个网关实例都必须能够访问该服务。

示例​

以下流程将启动 SOAP Proxy、配置网关访问端点,并通过 API7 网关调用公共 SOAP 操作。

配置 SOAP Proxy​

请选择与网关部署方式相匹配的配置。

将 GATEWAY_CONTAINER 设置为正在运行的 API7 网关容器。创建专用网络,并将网关连接到该网络:

export GATEWAY_CONTAINER=replace-with-gateway-container-name

docker network create gateway-soap-net
docker network connect gateway-soap-net "$GATEWAY_CONTAINER"

使用当前 API7 网关 Chart 所用的镜像,在共享网络上启动 SOAP Proxy:

docker run -d \
--name soap-proxy \
--network gateway-soap-net \
api7/soap-proxy:1.0.0

将 SOAP Proxy 端点添加到网关部署使用的持久化 config.yaml:

config.yaml
plugin_attr:
soap:
endpoint: http://soap-proxy:5000
timeout: 3000

更新配置源后重新加载网关:

docker exec "$GATEWAY_CONTAINER" apisix reload

调用 SOAP 操作​

创建一条路由,将 POST /SayHello 映射到 WSDL 文档中的 SayHello 操作:

curl "http://127.0.0.1:9180/apisix/admin/routes/soap-hello" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"uri": "/SayHello",
"methods": ["POST"],
"plugins": {
"soap": {
"wsdl_url": "https://apps.learnwebservices.com/services/hello?wsdl"
}
}
}'

请求路径标识 WSDL 操作,wsdl_url 标识服务契约和上游 SOAP 端点。

向路由发送 JSON 请求:

curl -i "http://127.0.0.1:9080/SayHello" \
-H "Content-Type: application/json" \
-d '{"Name": "John Doe"}'

API7 网关应返回 HTTP/1.1 200 OK 和以下响应体:

"Hello John Doe!"