跳到主要内容

soap

soap 插件提供了一种便捷的方法,用于在 RESTful HTTP 请求和 SOAP 请求以及它们对应的响应之间进行转换。

只需一个指向 WSDL 文件的 URL,API7 就会自动解析文件内容并生成转换逻辑,以允许协议转码。

示例

前置条件

soap 插件依赖独立的 soap-proxy 服务,该服务负责解析 WSDL 以及在 JSON 与 SOAP 之间进行转码。对于 Docker 部署,请在使用插件前启动 soap-proxy;对于 Helm 部署,请在配置网关 values 时启用由 Chart 管理的 soap-proxy 边车。

启动 SOAP Proxy

在与 APISIX 实例相同的网络中启动 soap-proxy 容器(请根据实际环境调整):

docker run -d \
--name soap-proxy \
--network=apisix-quickstart-net \
-p 5000:5000 \
api7/soap-proxy:1.0.0

配置网关

默认情况下,soap 插件预期可通过 http://127.0.0.1:5000 访问 soap-proxy。请更新网关静态配置,使插件指向当前部署使用的代理服务地址:

将以下配置添加到 config.yaml

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

重新加载网关,使更改生效:

apisix reload

调用操作

以下示例演示了如何在路由上配置插件,并调用 WSDL 文件中指定的上游服务器上可用的操作。

创建一个带有 soap 插件的路由:

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

❶ 将 URI 设置为 WSDL 文件中的操作名称。

❷ 仅允许 POST 请求方法。

❸ 设置 WSDL 文件的 URL 路径。

向路由发送请求以进行验证:

curl "http://127.0.0.1:9080/SayHello" -X POST -d '{"Name": "John Doe"}'

你应该看到带有以下内容的 HTTP/1.1 200 OK 响应:

"Hello John Doe!"