比较和对比REST和SOAP Web服务?

我目前弄清楚类似的是使用互联网协议(HTTP)在消费者和提供者之间交换数据。

区别在于:

  1. SOAP是基于XML的消息协议,而REST是一种架构风格
  2. SOAP使用WSDL进行消费者和提供者之间的通信,而REST只使用XML或JSON来发送和接收数据
  3. SOAP通过调用RPC方法调用服务,REST只是通过URLpath调用服务
  4. SOAP不返回人类可读的结果,而REST结果是可读的,只是简单的XML或JSON
  5. SOAP不仅仅是HTTP,它还使用其他协议,如SMTP,FTP等,REST仅仅是HTTP

这就是我所知道的,他们之间的差异。 任何人都可以纠正我,并添加更多。

SOAP使用WSDL进行消费者和提供者的通信,而REST只使用XML或JSON来发送和接收数据

WSDL定义了客户端和服务之间的契约,并且其性质是静态的。 如果REST协议有些复杂,并且由HTTP,URI,媒体格式和应用特定协调协议定义。 与WSDL不同,它是高度dynamic的。

SOAP不返回人类可读的结果,而REST结果是可读的,只是简单的XML或JSON

这不是真的。 纯XML或JSON根本不是RESTful。 只要消息必须是自包含的,并且协调代理/客户端和服务之间的交互,它们都没有定义任何违反REST的控制(即链接和链接关系,方法信息,编码信息等)。

使用链接+语义链接关系客户端应该能够确定下一个交互步骤,并遵循这些链接并继续与服务进行通信。

消息不必是人类可读的,可以使用模糊的格式并构build完全有效的REST应用程序。 信息是否是人类可读的并不重要。

因此,纯XML(application / xml)或JSON(application / json)不足以构buildREST应用程序。 使用具有强烈语义的通用媒体types的子集并提供足够的控制信息(链接等)来协调客户端与服务器之间的交互是合理的。

  • 有关控制信息的更多详细信息,我强烈build议阅读以下内容: http : //www.amundsen.com/hypermedia/hfactor/
  • 网站链接: http : //tools.ietf.org/html/rfc5988
  • 注册链接关系: http : //www.iana.org/assignments/link-relations/link-relations.xml

REST仅通过HTTP

不正确的是,HTTP被广泛使用,当我们谈论REST Web服务时,我们只假设HTTP。 HTTP定义了与其方法(GET,POST,PUT,DELETE,PATCH等)的接口以及可以统一使用的与资源交互的各种头文件。 这种均匀性也可以通过其他协议来实现。

PS非常简单,但非常有趣的REST解释: http : //www.looah.com/source/view/2284

在日常的实际编程术语中,最大的区别在于,使用SOAP时,您正在使用静态和强烈定义的数据交换格式,与REST和JSON数据交换格式相比,它们相当松散。 例如,使用SOAP,您可以validation交换的数据是否与XSD模式匹配。 因此,XSD作为客户和服务器如何理解交换数据的结构的“契约”。

JSON数据通常不会按照强烈定义的格式传递(除非您使用支持它的框架..例如http://msdn.microsoft.com/zh-cn/library/jj870778.aspx或者实现json-模式)。;

事实上,一些(很多/大多数人)会认为JSON的“dynamic”秘诀在于违背了通过数据契约约束它的哲学/文化( JSON RESTful Web服务使用数据契约 )

过去人们习惯于使用dynamic松散types语言的人倾向于对JSON的松散感觉更加舒适,而来自强types语言的开发人员更喜欢使用XML。

http://www.mnot.net/blog/2012/04/13/json_or_xml_just_decide

SOAP带来了自己的协议,并将重点放在应用程序逻辑(而不是数据)作为服务。 SOAP公开操作。 SOAP专注于访问命名操作,每个操作都通过不同的接口实现一些业务逻辑。

虽然SOAP通常被称为“Web服务”,但这是一个误用。 如果与Web有任何关系,SOAP就很less了。 REST基于URI和HTTP提供真正的“Web服务”。

作为例子,这里有几个电话和他们适当的家庭与评论。

getUser(User); 

在访问资源(数据)时,这是一个rest操作。

 switchCategory(User, OldCategory, NewCategory) 

REST允许许多不同的数据格式,因为SOAP只允许XML。 虽然这看起来似乎增加了REST的复杂性,因为您需要处理多种格式,但根据我的经验,这实际上是非常有益的。 JSON通常更适合数据并且parsing得更快。 由于支持JSON,REST可以更好地支持浏览器客户端。