Skip to main content

webservice,SOAP

Web服务(异构通信等)SOAP

服务:独立于具体的实现:Service解决的是异构的问题(操作系统、编程语言的差异),比如客户端是C#开发的,服务端是java开发的,那为了方便他们之间的交互,我们就要走纯文本的路线大家都能认识的。既然是纯文本,那需要一定的格式,SOAP传的数据里面包括了一系列的operation、参数的名称类型,但是数据驱动型的。

SOAP指的是简单对象访问协议,针对API纯文本化传递,例如规定传递XML的格式

WSDL:一个自描述的文件,把接口描述成xml的形式(只能XML),这个文件不需要自己写,通过工具生成。会根据接口、参数类型、参数顺序、接口返回的参数类型,全部用xml来表述出来。此外会把operation、服务所在的URL接口的名字写出来。

[SOAP的缺点](https://web-arch.ayaka.space/docs/review/Web开发进阶/第11章 Web服务#三soap的缺点)

  • 需要一个WSDL的文件,里面需要描述消息传递的格式,有一个外挂文件的方式总的来说是不好,需要额外的东西
  • 反复组装和解析SOAP需要消耗大量的时间,性能不太好,需要经过很多的翻译
  • 客户端、服务端和API耦合,一旦API发生变化(比如下单参数从四个变成五个),那么WSDL文件就要发生变化,服务端客户端代码都需要重新生成,需要消耗时间资源(代码可维护性变差)
  • 因此我们需要数据驱动型的方式来,Restful Web Service应运而生

RESTful: 无状态, 传递数据而不是代码, 幂等性, URL设计风格, http statuscode来表示返回结果

[WebService的优点缺点](https://web-arch.ayaka.space/docs/review/Web开发进阶/第11章 Web服务#五webservice的优点缺点)

  • 优点是跨平台,基于XML,json等等
  • 自描述:WSDL就是一个自描述文件,里面包括了一系列的操作,Restful的话就是完全基于URL
  • 模块化好,封装的好,不需要关系具体的实现
  • 区域访问性质广,可以穿透防火墙
  • 缺点是:写代码的效率低,不适合stand-alone应用,soap显然比之间rpc效率低,rest因为传递的是纯数据,数据的解析需要消耗一定的资源
  • 性能有一定的降低了:需要把java对象转化为一个纯文本的,或者解析文本作为一个java对象
  • 安全性,因为webService的地域性广,就比较容易受到攻击,或者中间人截获了。

[什么时候用web Service](https://web-arch.ayaka.space/docs/review/Web开发进阶/第11章 Web服务#六什么时候用web-service)

  • 支持跨防火墙的通讯、支持跨防火墙的通信、支持应用集成、支持B2B集成、鼓励重用软件
  • 不应该使用WS时:独立应用程序、如MS Office、局域网中的同构应用:例如COM+或EJB之间的通信(再比如spring访问mysql、redis、kafka、elasticSearch)

SOA

  • SOA指的是Service-oriented architecture (面向服务的架构)
  • 假如我要构建一个电子书店、里面包括了认证登录系统、财务系统、统计系统、订单系统,这么多系统开发下来很复杂,而且假如我是卖家,卖给了1000个新华书店的用户,然后突然发现某个系统存在漏洞,就要告诉一千个用户,这很麻烦
  • 所以就有一个新方法、登录系统用第三方的比如百度的,订单系统用第三方的,然后我自己就只做一个集成。如果发现登录系统有bug,就告诉百度的问题,这样就可以快速构建一个应用,节约开发成本
  • 特点:1、 服务之间松散耦合,也就是是登录系统、财务系统、统计系统、订单系统这些系统通过我开发的中间件联系,而不是之间直接互相通信,这样的好处就是假如我发现登录系统不好或者太贵了,我可以换一下,换之后别的系统也不会受到影响。2、位置透明,中介者负责路由,3、协议独立,从http切换到ftp,但是不要让客户端来实现