如今,Web开发者的可选技术相当之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各种有趣的客户端软件等等,一应俱全。所有这些产品和工具,都是为了帮助Web开发者用最快的速度开发出最好的Web应用。
然而,拥有大量可选软件方案以及为Web应用的特定部分选用特定方案,都是具有挑战的事;而且,现在Web开发者必须持续跟踪各种不断变化着的标准与方法。
举个例子,Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移)这两种方案。它们都是有效的方案,但在具体场合下采用哪种方案好,这要取决于Web开发者。
然而,SOAP作为一种古老的Web服务技术,短期内还不会退出历史舞台。而且,随着SOAP 1.2的出现,SOAP印象中的一些缺点已得到改进,采纳率和易用程度也都得到提高。另需注意的是,从W3C SOAP 1.2版开始,SOAP这一缩写不再代表Simple Object Access Protocol(简单对象访问协议),而是仅仅作为协议名称而已。
相对REST而言,SOAP 1.2多出一些开销,不过这些开销也带来了一些好处。首先,SOAP在三个方面离不开XML(Extensible Markup Language,可扩展标记语言):SOAP信封(envelope)是基于XML的,它定义了消息里有什么以及如何处理它;一套用于数据类型的编码规则;过程调用和响应的规划。SOAP信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)得到执行,然后一个XML文档随SOAP信封返回。
需要注意的是,基于“通用”传输协议是SOAP的一个优点。REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。不过,由于XML较为冗长且解析费时,因此采用XML也成为一个弊端。
不过,对Web开发者来说的好消息是,目前上述两种方案都是行之有效的方案。REST和SOAP都能解决许多Web方面的问题与挑战,而且在许多情况下,它们各自都能满足开发者的要求,也就是说可互换使用。
但很多人不知道,这两种技术可以混合搭配使用。REST很好理解,且极易上手;不过由于它缺乏标准,因此只被看作是一种架构方法。与之相比,SOAP是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。
因此,REST的适用场合包括:
- 有限的带宽和资源 别忘了返回的结构可以采用(由开发者定义的)任何格式。另外,由于REST采用标准的GET、PUT、POST和DELETE动词,因此可被任何浏览器所支持。除此以外,REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。
- 完全无状态的操作 对于那些需多步执行的操作,REST并非最佳选择,采用SOAP更合适。但是,如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST。
- 缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么REST是很好的选择。
以上已经覆盖很多方案了,那么,为什么还要考虑SOAP呢?正如前述,SOAP比较成熟而且是经过良好定义的,具有完整的规范。而REST只不过是一种方法,对开发未作任何规约;因此,假如你遇到以下场合,那么SOAP是最佳选择:
- 异步处理与调用 如果你的应用需要确保可靠性与安全性,那么请采用SOAP。SOAP 1.2为确保这种操作补充定义了WSRM(WS-Reliable Messaging)等标准。
- 形式化契约 若提供者/消费者双方必须就交换格式取得一致,那么采用SOAP更合适。SOAP 1.2为这种交互提供了严格的规范。
- 有状态的操作 如果应用需要上下文信息与对话状态管理,那么应采用SOAP。SOAP 1.2为此补充定义了WS-Security、WS-Transactions和WS-Coordination等标准。相比之下,REST方法要求开发者自己来实现这些框架性工作。
正如你所看到的,REST和SOAP各自有其用武之地。它们在安全性和传输层等方面有着自己的潜在问题,不过它们都能完成任务,而且在许多情况下,它们都丰富了Web的技术手段。因此,就这一论题,其实最好的原则就是灵活性原则;因为至少在现今的Web开发中,无论面对何种问题,Web开发者们总有办法运用好这两种技术中的一种。
相关推荐
与普通的基于 SOAP 的连接方案相比,它应该提供显着的速度优势(并且运行成本应该更低,因为它允许在普通许可证上同时进行 50 个连接)。 特约NetSuite的休息客户端 查看最新的 master 以确保该功能尚未实现或错误...
Lucee简化了Web服务(REST,SOAP,HTTP),ORM(Hibernate),搜索(Lucene),数据源(MSSQL,Oracle,MySQL等),缓存(infinispan,ehcache和memcached)等技术。 Lucee使用更少的资源并提供了更好的性能为Adobe...
lucee服务器(简称lucee)是一种动态的、基于java的标记和脚本语言,用于快速的web应用程序开发。
然而,它已成为最流行的 Web API 风格,在 2008 年超过了 SOAP。REST API 使用简单、可扩展、可移植且易于集成。 本白皮书的目的是了解创建 RESTful API 涉及哪些约束以及 Web REST API 的最佳实践是什么。 REST ...
直接在Postman中快速轻松地发送REST,SOAP和GraphQL请求。 自动执行手动测试并将其集成到CI / CD管道中,以确保任何代码更改都不会破坏生产中的API。 通过模拟端点及其响应来传达API的预期行为,而无需设置后端...
而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。 当前的网络应用软件还违背了REST的“无...
准备好,通过屏幕截图获得更详细的演练。 安装 从 SoapUI Pro 5.1.X 内的插件管理器中的插件库下载插件或准备就绪! API 1.X。 用法 该插件向 REST API 弹出菜单添加了“生成改造接口”操作。 为项目中的任何 REST ...
我想改进它,使其更稳定并添加更多功能(例如,重新集成macOS和Linux支持-包括本机调试器,添加SOAP支持,更好的数据库管理器); 而且有很多文件要写... 我之所以发布它是因为,为了做到这一点,我需要将其发布...
我是Business Banking Mobile项目的首席开发人员,在该项目中,我不断改进我们的代码,测试和交付实践,以更好地为我们的客户提供服务。我天生好奇,喜欢在团队中工作,我也不会太在意自己。科技栈 :books: ...
它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一 个gzip缓存servlet过滤器,支持REST和SOAP api等特点。MapDB: mapdb是一个内嵌的纯java的数据库,提供了并发的HashMap、TreeMap、Queue,可以基 于...
2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 ...
2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的...
2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的...
更少的冗长代码,严格的类型检查以及对并发的支持,使Go成为编写任何Web后端的更好选择。 一些最好的工具,例如Docker和Kubernetes,都是用Go编写的。 Google在日常活动中经常使用Go。 您可以在看到Go-using公司...
其他 OTRS肥皂库 该库已被取代,并且不再维护。 新的REST库(虽然尚未实现所有功能)对用户和“正确”的方式都更好。 该SOAP库仍在使用OTRS中的旧SOAP方法,而不是GenericInterface Webservices
多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写...
不知道您感觉如何,每当我参加讨论web服务的演讲时,总是听到很多缩写,如REST、XML/RPC、SOAP和RSS。然后就开始打盹,梦到有个地方树上长满KrispyKreme甜面卷。醒来时,我认识到实际上我做了很多web服务工作,并没...
Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...
第8章:REST和ROA最佳实践.................215 面向资源的基础...........................215 一般的ROA设计步骤........................216 可寻址性.................................216 状态与无状态性.....