REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为:

      1.网络上的所有事物都可以被抽象为资源(resource)      2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识      3.所有的操作都是无状态的

       REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建,获取,更新和删除就可以完成相关的操作和处理。您可以通过统一资源标识符(Universal Resource Identifier,URI)来识别和定位资源,并且针对这些资源而执行的操作是通过 HTTP 规范定义的。其核心操作只有GET,PUT,POST,DELETE。

       由于REST强制所有的操作都必须是stateless的,这就没有上下文的约束,如果做分布式,集群都不需要考虑上下文和会话保持的问题。极大的提高系统的可伸缩性。

       对于SOAP Webservice和Restful Webservice的选择问题,首先需要理解就是SOAP偏向于面向活动,有严格的规范和标准,包括安全,事务等各个方面的内容,同时SOAP强调操作方法和操作对象的分离,有WSDL文件规范和XSD文件分别对其定义。而REST强调面向资源,只要我们要操作的对象可以抽象为资源即可以使用REST架构风格。

REST ful 应用问题       是否使用REST就需要考虑资源本身的抽象和识别是否困难,如果本身就是简单的类似增删改查的业务操作,那么抽象资源就比较容易,而对于复杂的业务活动抽象资源并不是一个简单的事情。比如校验用户等级,转账,事务处理等,这些往往并不容易简单的抽象为资源。

       其次如果有严格的规范和标准定义要求,而且前期规范标准需要指导多个业务系统集成和开发的时候,SOAP风格由于有清晰的规范标准定义是明显有优势的。我们可以在开始和实现之前就严格定义相关的接口方法和接口传输数据。

       简单数据操作,无事务处理,开发和调用简单这些是使用REST架构风格的优势。而对于较为复杂的面向活动的服务,如果我们还是使用REST,很多时候都是仍然是传统的面向活动的思想通过转换工具再转换得到REST服务,这种使用方式是没有意义的。

效率和易用性      SOAP协议对于消息体和消息头都有定义,同时消息头的可扩展性为各种互联网的标准提供了扩展的基础,WS-*系列就是较为成功的规范。但是也由于SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。

      REST被人们的重视,其实很大一方面也是因为其高效以及简洁易用的特性。这种高效一方面源于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了Http最初的应用协议设计理念。同时,在我看来REST还有一个很吸引开发者的就是能够很好的融合当前Web2.0的很多前端技术来提高开发效率。例如很多大型网站开放的REST风格的API都会有多种返回形式,除了传统的xml作为数据承载,还有(JSON,RSS,ATOM)等形式,这对很多网站前端开发人员来说就能够很好的mashup各种资源信息

安全性       技术没有好坏,只有是不是合适,一种好的技术和思想被误用了,那么就会得到反效果。REST和SOAP各自都有自己的优点,同时如果在一些场景下如果去改造REST,其实就会走向SOAP(例如安全)。

       REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。

       同时很重要一点就是不要扭曲了REST现在很多网站都跟风去开发REST风格的接口,其实都是在学其形,不知其心,最后弄得不伦不类,性能上不去,安全又保证不了。

成熟度       SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通。

       由于没有类似于SOAP的权威性协议作为规范,REST实现的各种协议仅仅只能算是私有协议,当然需要遵循REST的思想,但是这样细节方面有太多没有约束的地方。REST日后的发展所走向规范也会直接影响到这部分的设计是否能够有很好的生命力。

webservice和restful的区别相关推荐

  1. 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

    http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 ...

  2. http接口、api接口、RPC接口、RMI、webservice、Restful等概念

    在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当         http接口:基于HTTP协议的开发接口.这个并不能排除没有使用其他的协议. api接口:API(Appli ...

  3. Http、Socket和WebService协议之间的区别

    1 数据传输方式 1.1 socket传输的定义和其特点     所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协 ...

  4. 网络协议(十四):WebSocket、WebService、RESTful、IPv6、网络爬虫、HTTP缓存

    网络协议系列文章 网络协议(一):基本概念.计算机之间的连接方式 网络协议(二):MAC地址.IP地址.子网掩码.子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类.IS ...

  5. RPC和RESTful的区别

    文章目录 RPC 进程间通信几种解决方案: 管道(Pipe)或者具名管道(Named Pipe) 信号(Signal) 信号量(Semaphore) 消息队列(Message Queue) 共享内存( ...

  6. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  7. 网络协议从入门到底层原理(10)WebSocket、WebService、RESTful、HTTPDNS、FTP文件传输协议、邮件相关协议、IPv6

    其他协议 WebSocket WebSocket - 建立连接 WebService RESTful HTTPDNS FTP文件传输协议 邮件相关的协议(SMTP.POP.IMAP) POP vs I ...

  8. GraphQL和RESTful的区别

    GraphQL 是Facebook于 2012 年在内部开发的数据查询语言,在 2015 年开源,旨在提供RESTful架构体系的替代方案. GraphQL和RESTful一样,都是一种网站架构,一种 ...

  9. RESTful源码学习笔记之RPC和 RESTful 什么区别

    REST,即Representational State Transfer的缩写.翻译过来是表现层状态转换. 如果一个架构符合REST原则,就称它为RESTful架构. 啥叫json-rpc? 接口调 ...

最新文章

  1. Know more about CBO Index Cost
  2. Java super关键字
  3. 【干货】数据分析规范总结!
  4. android gridview控件使用详解_作为Android 开发者该如何进阶?
  5. Java类加载器(一)——类加载器层次与模型
  6. 快速上手SpyGlass——基本流程
  7. view类不响应自定义消息_安卓平台如何给控件添加自定义操作?
  8. 碧雪情天服务器地址源如何修改,稀有游戏《碧雪情天online》网络版王者归来一键服务端+客户端 支持转生系统和新图...
  9. vue组件在ios不渲染_VueJS:点击后渲染新组件
  10. 杭电3068 最长回文 最长回文的manacher算法
  11. 操作元素之表单属性设置
  12. Python课设:中国五大城市PM2.5数据分析
  13. vi 的完整指令说明 -- YenYen 整理
  14. 健康系列——如何增强免疫力
  15. 汉诺塔//河内塔(Tower of Hanoi)
  16. html help文档制作,HTML Help Workshop(文件制作工具)
  17. 强化学习及Python代码示例
  18. P1605 迷宫 java
  19. JavaWeb——Spring 的操作数据库的 DAO模式
  20. Easy3D 孔洞修补

热门文章

  1. 防止sql注入:替换危险字符
  2. 谷歌修复另一枚已遭利用的 Chrome 释放后使用0day,细节未公开
  3. CVE-2021-3156:隐藏10年之久的 Sudo 漏洞,可使任意用户获得root 权限(详述)
  4. 奇安信代码卫士帮助微软修复严重漏洞,获官方致谢和奖金
  5. 58、什么是断言?应用场景?
  6. 《为iPad而设计:打造畅销App》——了解客户
  7. TableView Within Alert
  8. POJ 2455 Secret Milking Machine
  9. Android 编码规范:(五)避免创建不必要的对象
  10. Sqlite优化记录:使用全文索引加快检索速度-转