如何使用 Node.js 执行 SOAP 请求?

2025年5月9日 | 阅读 4 分钟

SOAP (简单对象访问协议) 是一种用于在 Web 服务中交换结构化信息的协议。它使得运行在不同操作系统、使用不同技术和编程语言的应用程序之间能够进行通信。与主要使用 JSON 的 REST 不同,SOAP 依赖于 XML 并遵循更严格的结构。SOAP 具有高度的可扩展性,并支持安全性、事务处理和符合 ACID 的操作。在本指南中,我们将探讨如何使用 Node.js 执行 SOAP 请求,涵盖不同的方法、最佳实践和高级技术。

为什么要在 Node.js 中使用 SOAP?

尽管 RESTful API 因其简洁性和灵活性而广受欢迎,但 SOAP 在企业级应用程序中仍然有很高的需求,尤其是在金融服务、医疗保健和遗留系统中。出于以下考虑,我们可能需要在 Node.js 中应用 SOAP:

  • 遗留系统接口:许多旧应用程序正在使用 SOAP。
  • 增强的安全性:SOAP 支持 WS-Security,使其适用于敏感数据。
  • 标准化:SOAP 严格标准化,因此交互可预测。
  • 有状态操作:SOAP 支持有状态操作,并且在某些业务工作流程中很有用,而 REST 则不支持。
  • 可靠的消息传递:SOAP 支持 ACID 事务和两阶段提交等功能。

为 Node.js 项目设置 SOAP 请求

在开始进行 SOAP 请求之前,让我们先设置一个基本的 Node.js 项目。

步骤 1:初始化 Node.js 项目

打开终端并创建一个新的项目目录

步骤 2:安装所需的包

为了执行 SOAP 请求,我们将使用 'soap' 包,它提供了一种与 SOAP 服务交互的简单方法。

理解 WSDL (Web 服务描述语言)

SOAP 服务依赖于 WSDL 文件来描述其功能。WSDL 文件包含:

  • 服务终结点:SOAP 服务所在的 URL
  • 操作:可用的方法以及请求/响应格式。
  • 数据类型:输入和输出参数的定义。
  • 绑定:指定使用的协议(通常是 HTTP/SOAP)。

在与 SOAP API 交互时,请始终查看 WSDL 以了解可用的方法和必需的参数。

进行基本的 SOAP 请求

让我们以一个公开可用的 SOAP Web 服务为例,例如 [货币转换器 Web 服务](https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL)。

步骤 1:加载 'soap' 模块并创建客户端

创建一个新文件 'client.js' 并添加以下代码

(Javascript)

步骤 2:调用 SOAP 方法

创建客户端后,我们可以调用 WSDL 中可用的方法。例如,将数字转换为单词

(Javascript)

运行脚本

如果一切正常,我们将看到将数字 123 转换为“一百二十三”的响应。

输出

How to Perform SOAP Requests with Node.js?

使用 Promise 进行 SOAP 请求

'soap' 包主要使用回调,但我们可以将其包装在 Promise 中以提高可读性。

修改 'client.js' 如下

此版本使用 `async/await` 提高了可读性和错误处理。

处理 SOAP 标头和身份验证

添加自定义标头

某些 SOAP API 需要自定义标头进行身份验证或附加元数据。我们可以使用 'addSoapHeader()' 添加标头

WS-Security 身份验证

对于需要 WS-Security 的服务,我们可能需要包含用户名令牌

高级主题

  • 错误处理策略:实施重试和回退以提高弹性。
  • 日志记录和调试:记录 SOAP 请求和响应有助于诊断问题。
  • 它通过流式处理解析器来处理大型 SOAP 响应,以处理如此庞大的 XML 响应。
  • 中间件 SOAP:为 Node.js 服务器安装 Express 中间件以处理 SOAP 请求。

结论

总之,从 Node.js 执行 **SOAP 请求** 可能相当简单,可以通过使用“soap”模块或通过“Axios”进行原始 XML 请求来完成。无论我们与哪个遗留系统或企业级系统交互,有效的 SOAP 请求处理都能确保我们的应用程序正确集成。错误处理、Promise 的使用和身份验证标头的添加等最佳实践将帮助您在 Node.js 应用程序中建立强大的基于 SOAP 的交互。

通过学习如何设置安全性、解析大型响应以及构建 SOAP 请求,开发人员可以优化他们的 API 交互。企业可以利用 SOAP 进行可靠且可扩展的数据交换,前提是这种方法结构良好。通过了解如何掌握这些技术,我们将提高我们将现代 Node.js 应用程序与工作中依赖遗留系统或企业软件的旧基础设施集成的能力。