文档章节

SOAP与REST比较

yope
 yope
发布于 2015/03/02 16:42
字数 1712
阅读 375
收藏 2
点赞 0
评论 0

REST一夜兴起?有些人可以说REST是HTTP出现之日就伴随而生的原则。

但是毋庸置疑的事实是,在Google和Yahoo等网络巨头发布的相同功能的Web Service API中,REST无疑受到更多的青睐。

SOAP (Simple Object Access Protocol) ,是一个严格定义的信息交换协议,用于在WS中把调用的数据封装成机器可读的格式化数据(xml,json等)。

事实上SOAP数据使用XML数据格式,定义了一整套复杂的标签,以描述调用的远程过程、参数、返回值和出错信息等等。

而且随着需要的增长,又不得增加协议以支持安全性,这使SOAP变得异常庞大,背离了简单的初衷。另一方面,各个服务器都可以基于这个协议推出自己的API,即使它们提供的服务及其相似,定义的API也不尽相同,这又导致了WSDL的诞生。

WSDL (Web Service Description Language) 也遵循XML格式,用来描述哪个服务器提供什么服务,怎样找到它,以及该服务使用怎样的接口规范,简言之,服务发现。

现在,使用Web Service的过程变成,获得该服务的WSDL描述,根据WSDL构造一条格式化的SOAP请求发送给服务器,然后接收一条同样SOAP格式的应答,最后根据先前的WSDL解码数据。绝大多数情况下,请求和应答使用HTTP协议传输,那么发送请求就使用HTTP的POST方法。

REST (REpresentational State Transfort)是一种架构风格,而不是协议或标准。他是面向资源的,连服务也抽象成了资源,因为他和HTTP协议紧密结合。

抛开R. T. Fielding博士论文里晦涩的理论不说,REST应该满足这样的特点:

1)客户端和服务器结构;

2)连接协议具有无状态性;

3)能够利用Cache机制增进性能;

4)层次化的系统;

5)按需代码。

SOAP和REST区别

大多数SOAP是运行在HTTP上,使用URI标识服务(一个服务对应着一个URI),SOAP也仅仅使用POST方法发送请求,用一个唯一的URI标识服务的入口。

举一个图书馆在线查询管理系统为例,服务提供者必须为每一本书提供一个内部标识,然后可能定义一个listBooks操作来返回一系列图书,一个getBook操作来返回指定的图书,一个createBook操作来向数据库加入新增的图书,一个deleteBook操作来删除作废的图书,每个操作都有各自的参数,尤其是用内部标识来标识操作的图书。

这种设计被诟病之处,在于deleteBook操作也要用POST方法来发送,而其实HTTP协议有更和逻辑的DELETE方法可用。REST正是这样设计的,REST为每一个资源(此处是图书)指定一个唯一的URI,

而用HTTP的4种方法GET、POST、PUT、DELETE直观地表示获取、创建、更新和删除图书。

同时图书集合也是和单本的图书不同的资源,如果用/books来代表图书列表,/books/ID来代表标识为ID的图书,那么对/books的GET操作就代表返回整个图书列表,对/books/ID的DELETE操作代表删除指定的图书,等等。

这样形象的说明相信比较好理解。

REST优点,简单直观,把HTTP协议利用到了极致,甚至HTTP的作者都没想到后期会有怎么紧密结合的应用。

利用了HTTP的消息头来指明消息的表示形式,用HTTP返回错误的status返回服务资源访问错误。

由此带来的直接好处是构建的成本减少了,例如用URI定位每一个资源可以利用通用成熟的技术,而不用再在服务器端开发一套资源访问机制。又如只需简单配置服务器就能规定资源的访问权限,例如通过禁止非GET访问把资源设成只读。
服务器无状态带来了更多额外好处,因为每次请求都包含响应需要的所有信息,所有状态信息都存储在客户端,服务器的内存从庞大的状态信息中解放出来。

而且现在即使一台服务器突然死机对客户的影响也微乎其微,因为另一台服务器可以马上代替它的位置,而不需要考虑恢复状态信息。更多的缓存也变成可能,而之前由于服务器有状态,对同一个URI的请求可能导致完全不同的响应。

总体结果是,网络的容错性和延展性都增强了,这些本来是WEB设计的初衷,日趋复杂和定制的WEB把它们破坏了,现在REST又返璞归真,试图把Web Service带回简单的原则中来。

REST不足,无状态带来的巨大优势,也带来了难以解决的问题。

例如,怎样授权特定用户才能使用的服务?怎样验证用户身份?如果坚持服务器无状态,也就是不记录用户登录状态,势必要求每一次服务请求都包含完整的用户身份和验证信息。在这种情况下,怎样避免冒认?怎样避免用户信息泄漏?事实上,构建REST附属的安全机制已经在讨论中,其结果无非导致另一个SOAP:

复杂的需求摧残了易用性。

REST的支持者声称REST的请求和应答数据简单可读,而SOAP则需要一系列繁琐的封装;

即使如此,SOAP仍然不能达到接口的一致性,不同的厂商有各自的接口,而REST只使用HTTP定义的方法,因此是通用的。事实确实如此吗?

试想用REST实现两数求和的服务,如果按照建议的做法,把服务(此处是加法)作为一个资源,参数(此处是两个加数)作为请求的参数,结果以XML或JSON语法返回,是否比SOAP更简单易用?

通用接口仍然没法达到,因为资源的名称、参数的名称、结果的格式仍然是服务提供者定义的。为了解决这个问题,提出了WASL(Web Application Description Language)来描述REST接口。WADL就像是WSDL的REST版,随着REST被应用到复杂的领域,SOAP的影子无处不在。


© 著作权归作者所有

共有 人打赏支持
yope
粉丝 15
博文 38
码字总数 33640
作品 0
厦门
程序员
SOA接口的两种常用实现比较:SOAP vs REST

SOA架构用于异构系统的协作,因此需要一种跨操作系统、跨语言的通用的消息交换格式。SOAP和REST都是基于文本的消息体,相比二进制消息而言具有跨平台的优势,因此被选作SOA接口的常用实现方法...

xinson ⋅ 2015/05/25 ⋅ 0

REST WebService与SOAP WebService的比较

在SOA的基础技术实现方式中,WebService占据了很重要的地位,通常我们提到WebService第一想法 是SOAP消息在各种传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大网站不断...

小样 ⋅ 2011/10/19 ⋅ 0

谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解

SOA: 维基百科解释:SOA:面向服务的软件架构(Service Oriented Architecture),是一种计算机软件的设计模式,主要应用于不通应用组件中通过某种协议来互操作,例如典型的通过网络协议。因此...

tantexian ⋅ 2016/04/11 ⋅ 0

WebService的两种方式SOAP和REST比较

我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑。如google map api采用了AJAX方式,通过javascript提供API,而淘宝TOP则采用...

lsnpurdue ⋅ 2017/07/27 ⋅ 0

SOAP webserivce 和 RESTful webservice 对比及区别

摘要: 简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMT...

huojiao2006 ⋅ 2017/02/27 ⋅ 0

REST和SOAP Web Service的区别比较

REST似乎在一夜间兴起了,这可能引起一些争议,反对者可以说REST是WEB诞生之始甚而是HTTP出现之日就相伴而生的原则。但是毋庸置疑的事实是,在Google和Yahoo等网络巨头发布的相同功能的Web S...

chape ⋅ 2014/04/09 ⋅ 0

Web 服务编程,REST 与 SOAP

<?xml version="1.0" encoding="UTF-8" standalone="no"?><users><user><name>tester</name><link>http://localhost:8182/v1/users/tester</link></user><user><name>tester1</name><link>ht......

职通网 ⋅ 2011/04/28 ⋅ 0

SOAP Webservice和RESTful Webservice

http://blog.sina.com.cn/s/blog_493a845501012566.html REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设...

imzdx ⋅ 2016/09/05 ⋅ 0

REST会是SOA的未来吗?

好像无论我们到哪儿都能听到这样的说法:REST将会是SOA的未来。很多刊物也将REST和SOAP与WS*[1]标准进行比较,但这些比较看起来都太过简单了。近来出现了两种较为主流的方法——本真REST(t...

Jason-ZH ⋅ 2015/10/31 ⋅ 0

restful webservice SOAP webservice

为了说明这个问题,必须的纠正一下我们对HTTP的认识。 首先回顾一下OSI七层模型 OSI(Open System Interconnection,开放系统互连)七层模型 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 ...

zppiio ⋅ 2014/12/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 57分钟前 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部