簡體   English   中英

如何在 NodeJs 中運行 SOAP 請求?

[英]How to run a SOAP request in NodeJs?

起初這聽起來像是一個重復的問題,但我已經瀏覽了我找到的所有博客/教程/視頻,但沒有一個真正說明您如何運行該請求。 示例:對於 RESTful 請求,您在 NodeJs 中編碼,點擊路由(https://localhost/3000/api/getStudent)並獲得響應。 在代碼中你使用 router.post('/getStudent', async (req,res) => { // 檢查響應或操作 })

但是在對所有功能進行編碼之后,就像在這里一樣 -

  1. https://medium.com/metrosystemsro/with-node-js-wrap-backend-soap-webservices-in-a-restful-api-a96887575046
  2. https://dafabulousteach.wpcomstaging.com/2016/05/19/making-a-soap-call-with-node/
  3. https://betterprogramming.pub/how-to-perform-soap-requests-with-node-js-4a9627070eb6

我在哪里調用該函數以及如何傳遞參數並對其進行測試? 我如何檢查響應?

為了將其置於您所詢問的上下文中,SOAP 服務只是一個服務器,它偵聽具有 XML 有效負載的 POST 請求的地址。 而已。

因此,如果您的 SOAP Web 服務地址是http://example.com/service_endpoint那么您可以通過在該地址發出 POST HTTP 請求並向其發送 SOAP XML 消息作為有效負載來調用 Web 服務。

顯然,請求中的 XML 消息必須與服務期望的內容相匹配,並且您知道如何通過閱讀文檔或使用SOAP Web 服務的 WSDL 來構建該 XML

因此,如果您知道如何向 REST 服務地址發出 POST HTTP 請求並向其發送 XML 有效負載(盡管對於 REST 最常用的是您使用 JSON),您就已經知道如何調用 SOAP Web 服務。

現在,為了方便起見,因為 SOAP 是一種協議,您調用服務的方式以及它期望作為 XML 有效負載的內容由 WSDL 描述,您可以使用讀取 WSDL 的工具並創建一個客戶端 API,您可以像任何代碼中的其他方法。 這些工具為您處理 HTTP POST 請求的詳細信息,以及將任何參數編組為 XML。 這可能是您感到困惑的地方。

所以讓我們舉個例子。

例如,如果您有一個名為savePerson的操作的服務,該操作接受firstNamelastName作為參數並在 WSDL 中進行描述,那么您的工具可能會生成一個具有此類方法並接受Person對象的客戶端,您可以調用它像:

var response = client.savePerson({ "firstName": "Kim", "lastName": "Seokjin" });

或此的一些變體。 然后您會得到一個響應,您可以像讀取任何其他對象一樣讀取該響應。 你可能會得到一個承諾,或者一個事件,或者客戶選擇的任何工作方式。 當您使用此代碼時,會發生什么情況是client在幕后為您執行 HTTP POST 請求並將人員對象編組為 XML,如下所示:

POST /service_endpoint
Host: http://example.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Body>
  <savePerson>
   <person>
     <firstName>Kim</firstName>
     <lastName>Seokjin</lastName>
   </person>
  </savePerson> 
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如果您不想從 WSDL 生成客戶端,您顯然可以自己使用任何您喜歡的 HTTP 庫發送此請求。 但是人們更喜歡使用生成的客戶端而不是直接處理這些細節(即發出 HTTP 請求、解析 XML 等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM