接口,强大,简单,交互,跨越平台

下面简单阐述这两大接口思想

一  REST:

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

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

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

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

二  SOAP

  SOAP偏向于面向活动,有严格的规范和标准,包括安全,事务等各个方面的内容。

  SOAP强调操作方法和操作对象的分离,有WSDL文件规范和XSD文件分别对其定义。

    而REST强调面向资源,只要我们要操作的对象可以抽象为资源即可以使用REST架构风格。

  如何确定使用REST:

    若本身只是简单的CRUD业务操作,那么抽象资源就比较容易。

    而对于复杂的业务活动抽象资源并不是一个简单的事情,比如校验用户等级,转账,事务处理等。
  如何确定使用SOAP:
    若有严格的规范和标准定义要求,且前期需要指导多个业务系统集成和开发的时,

    因SOAP风格有清晰的规范标准定义,SOAP更适合。

    我们可以在开始和实现之前就严格定义相关的接口方法和接口传输数据。
  一句话:

    简单数据操作,无事务处理,开发和调用简单使用REST架构风格较好。

  再者:
    REST核心是url和面向资源,url代替了原来复杂的操作方法。

    REST允许我们通过url设计系统,就像测试驱动开发使用测试用例设计类接口一样。

    所有可以被抽象为资源的东西都可以使用RESTful的url

  REST关键:
    使用REST的关键是如何抽象资源,抽象的越精确,对REST的应用越好。

———————————————————————————————————————

三  REST思想

  1.面向资源的接口设计

    所有的接口设计都是针对资源来设计的(包括操作也是一种资源)。

    URI的设计也是体现了对于资源的定位设计。

  2.抽象操作为基础的CRUD

    Http中的get,put,post,delete分别对应了read,update,create,delete四种操作

    如果仅仅是作为对于资源的操作,抽象成为这四种已经足够了,但是对于复杂的业务接口,未必能够满足。

    完全按照REST的思想来设计,那么适用的环境将会有限制,而非放之四海皆准的。

  3.Http是应用协议而非传输协议

    部分认为:REST的理念设计,其实是作了一套私有的SOAP协议,因此称之为REST风格的自定义SOAP协议。

  4.无状态,自包含

    接口设计都需做到这点,不仅仅是REST,也是作为可扩展和高效性的最基本的保证,SOAP也类似。

四  SOAP Webservice和RESTful Webservice的比较

  1.成熟度(总的来说SOAP在成熟度上优于REST)

    SOAP对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。

    REST国外很多大网站都发布了自己的开发API,很多都提供了SOAP和REST两种Web Service,

    但是由于REST只是一种基于Http协议实现资源操作的思想,因此各个网站的REST实现都自有一套。

    REST实现的各种协议仅仅只能算是私有协议,当然需要遵循REST的思想。

  2.效率和易用性(REST更胜一筹)

    SOAP协议对于消息体和消息头都有定义,同时消息头的可扩展性为各种互联网的标准提供了扩展的基础,

    WS-*系列就是较为成功的规范。但是也由于SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP

    处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。

    REST被人们的重视,其实很大一方面也是因为其高效以及简洁易用的特性。

    这种高效一方面源于其面向资源接口设计以及操作抽象简化了开发者的不良设计,

    同时也最大限度的利用了Http最初的应用协议设计理念。

    同时,REST很好的融合当前Web2.0的很多前端技术来提高开发效率。

      例如:很多大型网站开放的REST风格的API都会有多种返回形式(XML,JSON,RSS,ATOM)等形式。

  3.安全性

    SOAP在安全方面使用XML-Security和XML-Signature两个规范组成了WS-Security来实现安全控制的,

    当前已经得到了各个厂商的支持,.net ,php ,java 都已经对其有了很好的支持。

    REST 开放REST风格API的网站主要分成两种:

      一种是自定义了安全信息封装在消息中,

      另外一种就是靠硬件SSL来保障,这只能够保证点到点的安全,如果是需要多点传输的话SSL就无能为力了。

      安全这块其实也是一个很大的问题。

五  应用设计与改造

我们的系统要么就是已经有了那些需要被发布出去的服务,要么就是刚刚设计好的服务,但是开发人员的传统设计思想让REST的形式被接受还需要一点时间。同时在资源型数据服务接口设计上来说按照REST的思想来设计相对来说要容易一些,而对于一些复杂的服务接口来说,可能强要去按照REST的风格来设计会有些牵强。这一点其实可以看看各大网站的接口就可以知道,很多网站还要传入function的名称作为参数,这就明显已经违背了REST本身的设计思路。而SOAP本身就是面向RPC来设计的,开发人员十分容易接受,所以不存在什么适应的过程。总的来说,其实还是一个老观念,适合的才是最好的

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

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

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

(本文结合各大博客论坛,学习,借鉴,总结而来,欢迎转载)

【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别的更多相关文章

  1. Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

    浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.RE ...

  2. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  3. Python测试开发-浅谈如何自动化生成测试脚本

    Python测试开发-浅谈如何自动化生成测试脚本 原创: fin  测试开发社区  前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...

  4. springboot开发浅谈 2021/05/11

    学习了这么久,本人希望有时间能分享一下,这才写下这篇浅谈,谈谈软件,散散心情. 这是本人的博客园账号,欢迎关注,一起学习. 一开始学习springboot,看了好多网站,搜了好多课程.零零落落学了一些 ...

  5. OPC服务器开发浅谈 — 服务器模型(转)

    这里主要讨论的是OPC Data Access 2.0服务器的开发,在掌握了这个最常用的OPC服务器开发之后,对其它类型的OPC服务器,如A&E.HDA等就可以触类旁通了. 一个OPC服务器的 ...

  6. 浅谈 SOAP

    http://www.ibm.com/developerworks/cn/xml/x-sisoap/ 本文对 SOAP 作了一个初步介绍,给出几个简单示例:接着比较 CORBA,DCOM/COM 与 ...

  7. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  8. .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

    阅读目录: 1.开篇介绍 2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象 2.2.迭代单元 ...

  9. J1001.Java原生桌面及Web开发浅谈

    自从Java问世以来,在服务端开发方面取得了巨大的发展.但是在桌面/Web开发方面,一直没有得到大的发展.从最初的AWT,到Swing,再到JavaFX,Java从来没有在桌面/Web解决方案中取得重 ...

随机推荐

  1. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  2. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【.net 深呼吸】限制执行代码的权限

    前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心. App Domain的创建新应用程序域的方法中,有一个特殊的重载: public stati ...

  5. PHP数据类型之间的强制转换

    1.实型数据强制转换为整型数据 $float1=2.7; $int1=(int)$float1; echo var_dump($int1),"<br>"; 输出: in ...

  6. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  7. 关于Visual Studio 未能加载各种Package包的解决方案

    问题: 打开Visual Studio 的时候,总提示未能加载相应的Package包,有时候还无法打开项目,各种提示 解决方案: 进入用户目录 C:\Users\用户名\AppData\Local\M ...

  8. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  9. C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置

    参考页面: http://www.yuanjiaocheng.net/webapi/test-webapi.html http://www.yuanjiaocheng.net/webapi/web-a ...

  10. AutoMapper的介绍与使用(一)

    软件环境 vs2015 asp.net mvc 5 .NET Framework 4.5.2 AutoMapper 5.2.0.0 AutoMapper安装 新建asp.net mvc 项目 Auto ...