SOAP,Web service 的枢纽

前言

前两天,室友给我发了一套代码......


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

一段对话下来,我心中多个疑问:SOAP是什么?node调用java接口?

一向懒散的我,不知为何却对些问题有点兴趣,平常我们处理不同应用程序之间的通讯,都是以RESTful API的方式的,基于HTTP协议,互相传输JSON格式的数据以达到程序间的交流。现在却有一个称SOAP的东东,可以直接调用程序的接口?

SOAP,何方妖孽?

  • SOAP(Simple Object Access Protocol 简单对象访问协议)
  • SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。
  • SOAP 独立于平台、语言,且简单和可扩展

SOAP 怎么来的?

此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM,莲花(Lotus),康柏(Compaq)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium;W3C),目前SOAP 1.1版是业界共同的标准,属于第二代的XML协定(第一代具主要代表性的技术为XML-RPC以及WDDX)。

SOAP 的 好搭档:WSDL、Web Service

为了能了解SOAP的做的事,你首先需要了解和SOAP一同工作的两个同事。

Web Service 是一套应用程序的组件,也可以说是对外接口,它使用SOAP这一套标准,提供公共服务给别的程序调用。

WSDL 是基于XML语言的,用来描述web service的消息格式和协议细节,以及如何访问它们。它的全称是:Web Service Description Language web服务描述语言。

SOAP是怎么工作的?

在了解了SOAP、WSDL、Web Service的定义之后,我们就来窥探一下它们三个是怎么P的?

假设现在有两个应用程序,分别用两种语言进行开发的,一个是用nodejs开发的程序,一个是用java开发的程序。而java程序其中有一个方法(getUser)可以查询数据库中的某用户的信息。那么在nodejs程序请求java程序的(getUser)方法获取某用户信息的流程是怎么走的?

我在应用程序的层面上解释一下这个流程,

请看下图,然后我再对每一个步骤说明:


QQ20150111-3@2x.png

首先java程序会把getUser()做成Web Service,然后要提供对这个service的描述文档,那便是WSDL文件。nodejs程序要调用的方法以及参数的信息都存放在遵循了SOAP标准的WSDL文件中,所以要访问远端的web service,必须先获得对方提供的WSDL。

步骤一:nodejs程序通过http请求,获取到java程序提供的WSDL文件。nodejs程序得到这个WSDL文件之后,就会对它进行解析,得知java程序提供了getUser(),而且也知道这个方法需要的参数是string类型的且变量名userUUID

步骤二:在nodejs程序知道java程序有getUser()这个方法之后,它通过http请求,发送SOAP信息到java程序,java程序得到这个SOAP信息之后,进行解析,知道了nodejs程序需要请求getUser()方法,且提供了所需要的参数。

步骤三:java程序对nodejs的请求进行逻辑处理,查询数据库,然后把结果翻译成SOAP信息,再通过http协议发送到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>

综上,程序之间的调用,无论进行请求还是返回结果,每一次都需要构造一则SOAP信息,固然SOAP便是程序之间沟通的语言。

node开发中的soap

我是一名nodejs开发者,知道有这么一种程序之间交流信息的协议之后,很自然就想知道用nodejs怎么使用这个协议。

nodejs针对SOAP也有不少的第三方模块:

其中,node-soap是最受欢迎的(根据github上star数量),也是我最喜欢的。

本文写作参考:

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


如果本文对您有用
请不要吝啬你们的Follow与Start
这会大大支持我们继续创作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容