SOAP嫂拴,Web service 的樞紐

前言

前兩天播揪,室友給我發(fā)了一套代碼......


QQ20150111-1@2x.png
QQ20150111-2@2x.png

一段對話下來,我心中多個疑問:SOAP是什么筒狠?node調(diào)用java接口猪狈?

一向懶散的我,不知為何卻對些問題有點興趣辩恼,平常我們處理不同應用程序之間的通訊雇庙,都是以RESTful API的方式的谓形,基于HTTP協(xié)議,互相傳輸JSON格式的數(shù)據(jù)以達到程序間的交流〗埃現(xiàn)在卻有一個稱SOAP的東東寒跳,可以直接調(diào)用程序的接口?

SOAP竹椒,何方妖孽童太?

  • SOAP(Simple Object Access Protocol 簡單對象訪問協(xié)議)
  • SOAP 是基于 XML 的簡易協(xié)議,可使應用程序在 HTTP 之上進行信息交換胸完。
  • SOAP 獨立于平臺书释、語言,且簡單和可擴展

SOAP 怎么來的赊窥?

此標準由IBM爆惧、Microsoft、UserLand和DevelopMentor在1998年共同提出锨能,并得到IBM扯再,蓮花(Lotus),康柏(Compaq)等公司的支持腹侣,于2000年提交給萬維網(wǎng)聯(lián)盟(World Wide Web Consortium叔收;W3C),目前SOAP 1.1版是業(yè)界共同的標準傲隶,屬于第二代的XML協(xié)定(第一代具主要代表性的技術(shù)為XML-RPC以及WDDX)饺律。

SOAP 的 好搭檔:WSDL、Web Service

為了能了解SOAP的做的事跺株,你首先需要了解和SOAP一同工作的兩個同事复濒。

Web Service 是一套應用程序的組件,也可以說是對外接口乒省,它使用SOAP這一套標準巧颈,提供公共服務給別的程序調(diào)用。

WSDL 是基于XML語言的袖扛,用來描述web service的消息格式和協(xié)議細節(jié)砸泛,以及如何訪問它們。它的全稱是:Web Service Description Language web服務描述語言蛆封。

SOAP是怎么工作的唇礁?

在了解了SOAP、WSDL惨篱、Web Service的定義之后盏筐,我們就來窺探一下它們?nèi)齻€是怎么P的?

假設現(xiàn)在有兩個應用程序砸讳,分別用兩種語言進行開發(fā)的琢融,一個是用nodejs開發(fā)的程序界牡,一個是用java開發(fā)的程序。而java程序其中有一個方法(getUser)可以查詢數(shù)據(jù)庫中的某用戶的信息漾抬。那么在nodejs程序請求java程序的(getUser)方法獲取某用戶信息的流程是怎么走的宿亡?

我在應用程序的層面上解釋一下這個流程,

請看下圖奋蔚,然后我再對每一個步驟說明:


QQ20150111-3@2x.png

首先java程序會把getUser()做成Web Service她混,然后要提供對這個service的描述文檔,那便是WSDL文件泊碑。nodejs程序要調(diào)用的方法以及參數(shù)的信息都存放在遵循了SOAP標準的WSDL文件中坤按,所以要訪問遠端的web service,必須先獲得對方提供的WSDL馒过。

步驟一:nodejs程序通過http請求臭脓,獲取到java程序提供的WSDL文件。nodejs程序得到這個WSDL文件之后腹忽,就會對它進行解析来累,得知java程序提供了getUser(),而且也知道這個方法需要的參數(shù)是string類型的且變量名userUUID窘奏。

步驟二:在nodejs程序知道java程序有getUser()這個方法之后嘹锁,它通過http請求,發(fā)送SOAP信息到java程序着裹,java程序得到這個SOAP信息之后领猾,進行解析,知道了nodejs程序需要請求getUser()方法骇扇,且提供了所需要的參數(shù)摔竿。

步驟三:java程序?qū)odejs的請求進行邏輯處理,查詢數(shù)據(jù)庫少孝,然后把結(jié)果翻譯成SOAP信息继低,再通過http協(xié)議發(fā)送到nodejs程序。

本例中稍走,nodejs程序和java程序溝通的SOAP實例:

SOAP 請求:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

  <soap:Body xmlns:m="http://www.example.org/stock">
    <m:getUser>
      <m:userUUID>123456789</m:userUUID>
    </m:getUser>
  </soap:Body>
  
</soap:Envelope>

SOAP 響應:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

  <soap:Body xmlns:m="http://www.example.org/stock">
    <m:getUserResponse>
      <m:userName>JerryC</m:userName>
    </m:getUserResponse>
  </soap:Body>
  
</soap:Envelope>

綜上袁翁,程序之間的調(diào)用,無論進行請求還是返回結(jié)果婿脸,每一次都需要構(gòu)造一則SOAP信息粱胜,固然SOAP便是程序之間溝通的語言。

node開發(fā)中的soap

我是一名nodejs開發(fā)者盖淡,知道有這么一種程序之間交流信息的協(xié)議之后年柠,很自然就想知道用nodejs怎么使用這個協(xié)議凿歼。

nodejs針對SOAP也有不少的第三方模塊:

其中褪迟,node-soap是最受歡迎的(根據(jù)github上star數(shù)量)冗恨,也是我最喜歡的。

本文寫作參考:

http://www.w3school.com.cn/soap/index.asp
http://zh.wikipedia.org/wiki/SOAP


如果本文對您有用
請不要吝嗇你們的Follow與Start
這會大大支持我們繼續(xù)創(chuàng)作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末味赃,一起剝皮案震驚了整個濱河市掀抹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌心俗,老刑警劉巖傲武,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異城榛,居然都是意外死亡揪利,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門狠持,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疟位,“玉大人,你說我怎么就攤上這事喘垂√鹂蹋” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵正勒,是天一觀的道長得院。 經(jīng)常有香客問我,道長章贞,這世上最難降的妖魔是什么祥绞? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮阱驾,結(jié)果婚禮上就谜,老公的妹妹穿的比我還像新娘。我一直安慰自己里覆,他們只是感情好丧荐,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喧枷,像睡著了一般虹统。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隧甚,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天车荔,我揣著相機與錄音,去河邊找鬼戚扳。 笑死忧便,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的帽借。 我是一名探鬼主播珠增,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼超歌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒂教?” 一聲冷哼從身側(cè)響起巍举,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凝垛,沒想到半個月后懊悯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡梦皮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年炭分,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剑肯。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡欠窒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出退子,到底是詐尸還是另有隱情岖妄,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布寂祥,位于F島的核電站荐虐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丸凭。R本人自食惡果不足惜福扬,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惜犀。 院中可真熱鬧铛碑,春花似錦、人聲如沸虽界。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莉御。三九已至撇吞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間礁叔,已是汗流浹背牍颈。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琅关,地道東北人煮岁。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親画机。 傳聞我的和親對象是個殘疾皇子勤篮,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96色罚、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,412評論 0 10
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,815評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)账劲,斷路器戳护,智...
    卡卡羅2017閱讀 134,715評論 18 139
  • 心中的白蘭花 在老窗前流淌歲月 你在窗前,我在遠方 雁落的歸宿 讓我止步于當下 問候瀑焦,言語的蒼白中 總有一絲無奈地...
    混跡在簡書閱讀 639評論 0 0
  • 所有認識我和我認識的朋友 大家好: “掙”錢和“賺”錢?[拳頭][拳頭][拳頭] 95%的人都沒有搞清楚這兩者的區(qū)...
    楊大民閱讀 203評論 0 0