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,但是不要让客户端来实现