SOAP: Simple Object Access Protocol
REST: Representation State Transfer
SOAP的简单介绍
SOAP可使用多种协议进行传输,用于解决RPC(Remote Procedure Call)
当给http的header设置SOAPAction(它的值为server的url)时,就指定了这次请求为Soap 请求。request body是xml格式的。Envelope里面记录着要调用的方法名,如果该方法还有参数的话,还会有参数名和值。
如下,一次请求和应答:
POST /StockQuote HTTP/1.1
Host: www.server.com
Content-Type: text/xml;
charset="utf-8"
Content-Length: 555
SOAPAction: "Server-URI" <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">/**这两个命名空间是必须的*/ <SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Server-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml;
charset="utf-8"
Content-Length:555 <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> /**这两个命名空间是必须的*/
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Server-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP协议可以简单地理解为:SOAP=RPC+HTTP+XML,即采用HTTP作为通信协议,RPC作为一致性的调用途径,XML作为数据传送的格式,从而允许服务提供者和服务客户经过防火墙在Internet上进行通信交互。
WSDL(Web Service Description Language)用来描述哪个服务器提供什么服务,怎么找到它,以及该服务使用怎样的接口规范。
使用Web Service的过程:获得该服务的WSDL描述,根据WSDL构造一条格式化的SOAP请求,发送给Web Service,然后接收一条同样的SOAP格式的应答,最后根据WSDL解码数据。
SOAP每次请求web service用的都是HTTP的post方法。这一点使得SOAP在当下流行的分布式网络应用中的表现远远不如REST。
SOAP还可以与其他传输协议搭配使用,TCP,UDP,SMTP,MIME都可以,这是他的优点
REST的简单介绍
相比SOAP, REST更轻量。web2.0的兴起,REST成为了流行架构风格。
它是 ROA(Resource-Oriented Architecture)的。它把网络上所有的事物都抽象成资源(resource)。这个资源是数据和表现形式的组合。每个资源都有其对应的资源标识符URI(Uniform Resource Identifier),对资源的所有操作都被抽象成CRUD。
用REST原则设计的软件、体系结构都很RESTful。
REST的CRUD正好对应了HTTP的post/get/put/delete。这使得分布式服务应用中的代理服务器有了更大的用武之地。比如proxy server可以根据这次请求是GET 请求来做好缓存工作。还可以做权限过滤,比如哪些IP段的不可以做POST操作。这在SOAP里是完全不可能的,因为SOAP用的是HTTP的post,proxy server无法知道这是个查询,可以从缓存中取数据。如果SOAP要实现这些的话,还需要拆envelope以及知道真正的服务器端每个方法的用途,这样的耦合是完全不合理的。
REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。
REST 构建的系统其系统的扩展能力要强于 SOAP,这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持等诸多方面。
而SOAP的成熟性可以给需要提供给多开发语言的,多传输方式的,对于安全性要求较高的接口设计带来便利。
还有好些特性不能完整的理解:
REST的stateless
SOPA怎么使用WS-Security, WS-Transactions,和WS-Coordination的,它是用这些来保持状态的吗?
refer: https://juejin.im/post/5b8fd9b66fb9a05d0c37aa42
SOAP和REST的更多相关文章
-
【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别
接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...
-
salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中
项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...
-
infopath发布的提示“无法解析SOAP消息”(The SOAP message cannot be parsed)问题解决方案
最近发现一个列表数据过大,每次发布infopath表单提示如下错误: 后来发现一个infopath表单通过list.asmx and Formsservice.asmx来进行发布的. This err ...
-
Rest webservice 和SOAP webservice
SOAP: 简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP) ...
-
webservice客户端添加soap Header信息
根据wsdl文件的header信息,在客户端中添加相应的header 1.wsdl信息如图 <soapenv:Envelope xmlns:soapenv="http://schema ...
-
推荐一篇 关于REST 和 SOAP区别的文章
写的很出色! https://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/ 我的感觉就是REST针对的是资源,通过api的URL就 ...
-
c/c++的Soap应用
1. 关于soap 在许多项目中团队中,我们常常会听到这样的话:我们这里是用webservice交互的.而说话的场景往往就是交互对象双方比较异构,所谓异构.即双方是不同的开发语言.不同的运行环境等.比 ...
-
C# 通过模拟http请求来调用soap、wsdl
C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码 ...
-
彻底理解webservice SOAP WSDL
WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...
-
WCF服务创建与抛出强类型SOAP Fault
原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...
随机推荐
-
MongoDB 数组
MongoDB是文档型数据库,每个文档(doc)表示数据的一项记录.相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组.MongoDB的数组是一系列元素的集合 ...
-
Debian安装记录
Fedora着实让我伤心透了.前天和昨天搞了整整两天Fedora 20的安装,午睡也没有,晚上就睡了四个小时不到,几乎尝试了所有Fedora 20的桌面版本,全部出问题了!就因为我的笔记本显卡是ATI ...
-
硬盘类型和Linux的分区
目前硬盘主要分为以下几种:IDE,SCSI,SATA,SAS.其中SAS(Serial Attached SCSI)即串行连接SCSI,属于SCSI的新一代技术. 以下是Linux常见设备的名称: 装 ...
-
VC调试篇
难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件. 我以前接触的程序大多是有比较成形的思路和方法,调试起来出 ...
-
proguard android迷茫
我们收拾它意味着蛊惑项目即将结束.上线.但是,当这个问题就更烦躁人,我也记录因混乱中遇到的问题 首先,我在装android4.0封装版本,有没有在这个文件查看器项目 假设有,请继续点击进入projec ...
-
Unity 游戏框架搭建 (十九) 简易对象池
在Unity中我们经常会用到对象池,使用对象池无非就是解决两个问题: 一是减少new时候寻址造成的消耗,该消耗的原因是内存碎片. 二是减少Object.Instantiate时内部进行序列化和反序列化 ...
-
JAVA002标识符的命名规则、关键字
标志符命名规则: 1.标志符可以由字母.数字.下划线(_)和美元符号($)组成,不能以数字开头($sen.Void) 2.标志符严格区分大小写 3.标志符不能是Java的关键字和保留字(eg:publ ...
-
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring获取context
今天学习spring项目的时候出现了下面的错误信息: java.lang.ClassNotFoundException: org.springframework.web.context.Context ...
-
OAuth机制原理(开放授权机制)
1.简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的. 国 ...
-
springboot-22-自定义starter
先说下springboot的运行原理 springboot最主要的配置 是 @SpringBootApplication 然后这里面 @EnableAutoCOnfiguration 最为重要, 继续 ...