从目前的两种技术发展来看,两种方法都是webservice( RPC ) 的实现,调用一个接口,然后取得一些参数,进行跨系统的通信。

从标准上看,REST是一种思想,在http(s)上套了一些操作守则;而SOAP是带有强规范 WS-(X) 的标准。

所以,SOAP肯定会有相应的软件组件来构建、验证监测webservice,而REST的实现就五花八门了,其实现在很多大公司的OPEN API ,很多都像是在SOAP的基础上改造的,不大符合REST的思想。

Flickr: 
       请求消息:

http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value

  这里就可以很明显看出它所定制的REST请求其实和RPC没有什么太大的区别。 
       
       消息返回: 
  正确处理返回

<?xml version="1.0" encoding="utf-8" ?> 
<rsp stat="ok"> 
         [xml-payload-here] 
</rsp>

  错误处理返回

<?xml version="1.0" encoding="utf-8" ?> 
<rsp stat="fail"> 
         <err code="[error-code]" msg="[error-message]" /> 
</rsp>

根据返回可以看出已经违背了REST的思想,还是把Http协议作为传输承载协议,并没有真正意义上使用Http协议作为资源访问和操作协议。 
       总的来说,只是形式上去模仿REST,自己搞了一套私有协议。

Yahoo Maps: 
       请求消息:

采用REST推荐的方式,URI+Parameters。

返回消息:

<?xml version="1.0" encoding="UTF-8"?> 
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="urn:yahoo:maps" 
xsi:schemaLocation="urn:yahoo:maps http://local.yahooapis.com/MapsService/V1/GeocodeResponse.xsd"> 
<Result precision="address"> 
    <Latitude>37.416384</Latitude> 
    <Longitude>-122.024853</Longitude> 
    <Address>701 FIRST AVE</Address> 
    <City>SUNNYVALE</City> 
    <State>CA</State> 
    <Zip>94089-1019</Zip> 
    <Country>US</Country> 
</Result> 
</ResultSet>

SOAP的精简xml返回,其他信息,例如出错码等信息由Http协议头来承载。

YouTube: 
请求消息:

可以看到对于资源操作的URI定义也是参数的一部分。

返回消息:

<?xml version="1.0" encoding="utf-8"?> 
<ut_response status="ok"> 
    <user_profile> 
        <first_name>YouTube</first_name> 
        <last_name>User</last_name> 
        <about_me>YouTube rocks!!</about_me> 
        <age>30</age> 
        <video_upload_count>7</video_upload_count> 
    </user_profile> 
</ut_response>

自定义的类SOAP消息。

Amazon: 
       请求消息:

https://Amazon FPS web service end point/?AWSAccessKeyId=Your AWSAccessKeyId 
      &Timestamp=[Current timestamp] &Signature=[Signature calculated from hash of Action and Timestamp] 
      &SignatureVersion=[Signature calculated from hash of Action and Timestamp] 
      &Version=[Version of the WSDL specified in YYYY-MM-DD format] &Action=[Name of the API] 
      &parameter1=[Value of the API parameter1] &parameter2=[Value of the API parameter2] 
      &...[API parameters and their values]

返回消息:

类似于SOAP的自有协议,消息体中包含了消息状态等附加信息。

总结:

1. 基本符合REST标准方式:资源URI定义(资源.操作)+参数。这类设计如果滥用get去处理其他类型的操作,那么和2无异。

2. REST风格非REST思想:资源URI定义+参数(包含操作方法名)。其实就是RPC的REST跟风。

3. 类似于SOAP消息,自定义协议,以xml作为承载。(可扩展,例如鉴权,访问控制等),不过那就好比自己定义了一套SOAP和SOAP extends。大型的有实力的网站有的采取此种做法。

WebService的两种方式SOAP和REST比较相关推荐

  1. WebService的两种方式SOAP和REST比较 (转)

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

  2. pb对Web Service的操作可使用两种方式实现

    从PB8.0/9.0开始,就已经提供Web Service Proxy功能,能够直接进行相关程序的编写. 但是,部分老项目使用PB6.5开发 研究后发现,其实PB6.5要操作Web Service也挺 ...

  3. Eclipse安装SVN插件的两种方式

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 23小时以前 CSDN日报 ...

  4. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  5. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                      优点:输入一行代码立刻返回结果                       缺点:无法永久保存代码 方法 ...

  6. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  7. android不调用系统发送短信,android之两种方式调用短信发送接口

    释放双眼,带上耳机,听听看~! 相信很多程序员在开发程序的时候都会遇到短信调用端口的情况,今天是技术狗小编为大家带来的关于android之两种方式调用短信发送接口,希望对你学习这方面知识有帮助! an ...

  8. android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...

  9. VS Code - Debugger for Chrome调试JavaScript的两种方式

    VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...

最新文章

  1. [转载红鱼儿]kbmmw 开发点滴:ErrorTable用法
  2. 数组元素替换_LeetCode 题解 | 189. 旋转数组
  3. 邬贺铨:工业物联网的技术与前景
  4. 借书证信息管理系统,C语言实现
  5. Altium Designer 规则设置Advance(Query)的使用
  6. linux下查看系统进程占用的句柄数
  7. mysql text查找性能_MySQL TEXT字段性能
  8. Jquery事件、冒泡、委托与节点
  9. 排队接水(信息学奥赛一本通-T1319)
  10. 查看Linux版本系统信息方法汇总
  11. 设置servlet或action作为欢迎页面
  12. 如何查看网页缓存的密码
  13. O-超大型LED显示屏
  14. AndroidOpenCV摄像头预览旋转90度问题
  15. 抖音自拍特效如何java实现_抖音特效在 Web 端的实现
  16. 如何进行音频录制?实用的音频录制方法合集
  17. 服务器阵列有什么作用,服务器存储-存储服务器和磁盘阵列有什么区别
  18. 对象不可达,一定会被垃圾收集器回收么?
  19. 高性能数据库连接池的内幕
  20. 移动安全--37--说说Android软件壳

热门文章

  1. Vue怎样新建并启动项目(图文教程详解)
  2. 关于mysql使用!=或者<>会导致索引失效问题的验证
  3. 吐血整理《计算机网络五层协议之物理层(下)》
  4. 图片跟着鼠标_刷完几百张网易云Banner,我发现了2个PPT图片处理的大招!
  5. 直播预告丨告别后知后觉的指标波动,神策智能预警分析直播来袭
  6. 企业服务与发展联盟即将正式成立
  7. SparkSQL的3种Join实现
  8. 美征信巨头Equifax因Struts漏洞导致数据大规模泄露
  9. 使用树莓派和kali Linux打造便携式渗透套件
  10. 课程三、电子商务物流解决方案