Restful API和Web Service的前世今生

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37979178/article/details/83691861

今天下午最大的新闻就是IG夺冠吧,整个朋友圈都被刷屏了,作为一名90后热血青年,我也要送上我对IG的祝贺。回到我们的技术,这篇博客我主要和大家聊的技术是Restful Service和老牌的基于SOAP 的WebService的故事,我们会讲到WebService的“不务正业”,以及Restful Service盗版历史,接下来精彩开始。

分布式应用的第一次变革Web Service

首先在聊Web Service的时候我们要明确他是一种以SOAP为应用协议Http为传输协议构建分布式应用的面向服务的实现方式,这要区别于古老的基于组件构建的分布式应用。和传统的基于组件构建的系统相比首先是模块之间信息的通信方式不同,传统的是RMI式的方法调用这一调用要求调用方与被调用方拥有相同的开发语言,平台类型要一致,而Web Service则是跨平台跨语言的,你可以用各种开发语言来开发Web Service,因为最终都是通过WSDL,XSD这一规范做定义,以SOAP为应用协议通过Http这种方式来相互访问的(Hibernate中HQL的用处)。另外就是传统分布式应用通信强调的是组件,而Web Service是面向服务,逻辑粒度抽象程度都要远远大于组件,传统的组件调用的是过程,而Web Service更侧重对方法的调用。从模块通信方式,融合程度,逻辑集成度来看Web Service的诞生无疑是分布式应用开发者的春天。

“不务正业”的追风少年与“听话孩子”的故事

为什么要说Web Service不务正业呢,这还要从Http协议说起,我们在上边说过Http协议对于Web Service应用来说只是一个传输协议,但对于Http协议的制定者Roy T. Fielding(HTTP/1.1协议专家组负责人)来说,他在制定该协议的时候可从来不是要让Http协议作为一个不入流的“消息承载者”的,于是在2000年他提出了以Http协议作为应用协议以“超链接”为驱动的RESTFUL面向资源架构,这样“听话的孩子”Restful Web Service就诞生了。和Web Service相比Restful Web Service有很多不一样的地方,二者的区别主要包括以下几点:1. Rsetful Web Service的开发是面向资源的,而WebService则是面向方法。2. Restful Web Service以Http协议作为应用协议,对资源的操作基于Http协议的几个关键方法“Get,Post,Put,Delete(204),Head,Patch,Options”,而Web Service则将方法信息封装在SOAP信封里经由Http的Post方法发送给服务端。这一区别的结果就是Restful Web Service利于缓冲(符合Web方式,利于GET缓冲),而Web Service在缓冲方面则表现出了极大的短板,因为缓冲服务器根本不知道SOAP里边的方法是不是Get,以及真实的请求资源是什么。3.有关安全控制方面,对于基于代理服务器实现的安全控制,一般代理服务器是根据URL以及请求方法来确定该用户是否拥有相关操作权限的,很明显Restful Web Service贴近Web方式满足要求,而基于SOAP的Web Service实际的方法信息无从知晓,不具备实现安全控制的条件。
Restful Web Service实现安全控制

基于SOAP的Web Service

孰优孰劣

Restful Web Service接口定义架构图
如果非要在二者中评出一二的话,只能说在各自的领域都是王者。WebService比较成熟,在涉及到复杂的业务逻辑,事务例如转账,用户等级划分等业务逻辑的处理上要优于Restful Service。而Restful Web Service由于是无状态的,在构建分布式应用的时候不用考虑用户Session,所以在构建分布式应用时灵活度更高,但在涉及到授权方面则略逊于前者(借助OAuth实现授权)。此外由于Restful Web Service以Http为应用协议其资源状态的转变方法有限(Http的七种方法),如果需要其他的方法只能借助已经实现方法扩展的第三方框架实现复杂操作而Web Service则可以定义自己的方法。总体来看Restful Web Service更易于构建简单的基于资源的分布式应用,而Web Service则适用于业务逻辑复杂,对系统安全性要求更高的大型企业级应用构建。

猜你喜欢

转载自blog.csdn.net/qq_37979178/article/details/83691861