soap
soap 插件提供了一种便捷的方法,用于在 RESTful HTTP 请求和 SOAP 请求以及它们对应的响应之间进行转换。
只需一个指向 WSDL 文件的 URL,API7 就会自动解析文件内容并生成转换逻辑,以允许协议转码。
示例
前置条件
soap 插件依赖独立的 soap-proxy 服务,该服务负责解析 WSDL 以及在 JSON 与 SOAP 之间进行转码。对于 Docker 部署,请在使用插件前启动 soap-proxy;对于 Helm 部署,请在配置网关 values 时启用由 Chart 管理的 soap-proxy 边车。
启动 SOAP Proxy
- Docker
- Kubernetes (Helm)
在与 APISIX 实例相同的网络中启动 soap-proxy 容器(请根据实际环境调整):
docker run -d \
--name soap-proxy \
--network=apisix-quickstart-net \
-p 5000:5000 \
api7/soap-proxy:1.0.0
对于 Helm 部署,请在网关 values 中启用由 Chart 管理的 soap-proxy 边车,并保持 values 文件中的其余内容不变。
soapProxy:
enabled: true
然后,将 values 文件应用到现有网关 Release:
helm upgrade <gateway-release-name> api7/gateway -n <namespace> -f values.yaml
配置网关
默认情况下,soap 插件预期可通过 http://127.0.0.1:5000 访问 soap-proxy。请更新网关静态配置,使插件指向当前部署使用的代理服务地址:
- Docker
- Kubernetes (Helm)
将以下配置添加到 config.yaml:
plugin_attr:
soap:
endpoint: http://soap-proxy:5000
timeout: 3000
重新加载网关,使更改生效:
apisix reload
对于 API7 网关 Helm 部署,请启用由 Chart 管理的 SOAP Proxy 边车,并更新 Chart values 中的 pluginAttrs.soap。Chart 会将此值渲染到生成的网关配置 plugin_attr.soap 中。请保持 values 文件中的其余内容不变。
soapProxy:
enabled: true
pluginAttrs:
soap:
endpoint: http://127.0.0.1:5000
timeout: 3000
然后,将 values 文件应用到现有网关 Release:
helm upgrade <gateway-release-name> api7/gateway -n <namespace> -f values.yaml
调用操作
以下示例演示了如何在路由上配置插件,并调用 WSDL 文件中指定的上游服务器上可用的操作。
创建一个带有 soap 插件的路由:
- Admin API
- ADC
- Ingress Controller
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"
}
}
}'
services:
- name: soap-service
routes:
- name: soap-hello
uris:
- /SayHello
methods:
- POST
plugins:
soap:
wsdl_url: "https://apps.learnwebservices.com/services/hello?wsdl"
将配置同步到网关:
adc sync -f adc.yaml
- Gateway API
- APISIX CRD
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: soap-hello
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /SayHello
method: POST
filters:
- type: ExtensionRef
extensionRef:
group: apisix.apache.org
kind: PluginConfig
name: soap-plugin-config
---
apiVersion: apisix.apache.org/v1alpha1
kind: PluginConfig
metadata:
namespace: aic
name: soap-plugin-config
spec:
plugins:
- name: soap
config:
wsdl_url: "https://apps.learnwebservices.com/services/hello?wsdl"
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: aic
name: soap-hello
spec:
ingressClassName: apisix
http:
- name: soap-hello
match:
paths:
- /SayHello
methods:
- POST
plugins:
- name: soap
enable: true
config:
wsdl_url: "https://apps.learnwebservices.com/services/hello?wsdl"
应用配置:
kubectl apply -f soap-ic.yaml
❶ 将 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!"