RESTful Webservice 和 SOAP Webserivce 对比及区别

WebService接口方式和Restful接口这两者有什么区别和相同点 WebService和RESTful接口都是用于在网络上进行通信和数据交换的技术,但它们在设计和使用上有一些重要的区别和相似之处。 阅读详情

接口抽象

RESTful Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务能力,而不同的是,SOAP 应用都通过定义自己个性化的接口方法来抽象 Web 服务,这更像我们经常谈到的 RPC。例如本例中的 getUserList 与 getUserByName 方法。

RESTful Web 服务使用标准的 HTTP 方法优势,从大的方面来讲:标准化的 HTTP 操作方法,结合其他的标准化技术,如 URI,HTML,XML 等,将会极大提高系统与系统之间整合的互操作能力。尤其在 Web 应用领域,RESTful Web 服务所表达的这种抽象能力更加贴近 Web 本身的工作方式,也更加自然。

同时,使用标准 HTTP 方法实现的 RRESTful Web 服务也带来了 HTTP 方法本身的一些优势:

  • 无状态性(Stateless)

HTTP 协议从本质上说是一种无状态的协议,客户端发出的 HTTP 请求之间可以相互隔离,不存在相互的状态依赖。基于 HTTP 的 ROA,以非常自然的方式来实现无状态服务请求处理逻辑。对于分布式的应用而言,任意给定的两个服务请求 Request 1 与 Request 2, 由于它们之间并没有相互之间的状态依赖,就不需要对它们进行相互协作处理,其结果是:Request 1 与 Request 2 可以在任何的服务器上执行,这样的应用很容易在服务器端支持负载平衡 (load-balance)。

  • 安全操作与幂指相等特性(Safety /Idempotence)

HTTP 的 GET、HEAD 请求本质上应该是安全的调用,即:GET、HEAD 调用不会有任何的副作用,不会造成服务器端状态的改变。对于服务器来说,客户端对某一 URI 做 n 次的 GET、HAED 调用,其状态与没有做调用是一样的,不会发生任何的改变。

HTTP 的 PUT、DELTE 调用,具有幂指相等特性 , 即:客户端对某一 URI 做 n 次的 PUT、DELTE 调用,其效果与做一次的调用是一样的。HTTP 的 GET、HEAD 方法也具有幂指相等特性。

HTTP 这些标准方法在原则上保证你的分布式系统具有这些特性,以帮助构建更加健壮的分布式系统。

安全控制

为了说明问题,基于上面的在线用户管理系统,我们给定以下场景:

参考一开始我们给出的用例图,对于客户端 Client2,我们只希望它能以只读的方式访问 User 和 User List 资源,而 Client1 具有访问所有资源的所有权限。

如何做这样的安全控制?

通行的做法是:所有从客户端 Client2 发出的 HTTP 请求都经过代理服务器 (Proxy Server)。代理服务器制定安全策略:所有经过该代理的访问 User 和 User List 资源的请求只具有读取权限,即:允许 GET/HEAD 操作,而像具有写权限的 PUT/DELTE 是不被允许的。

如果对于 REST,我们看看这样的安全策略是如何部署的。如下图所示:


图 4. REST 与代理服务器 (Proxy Servers)
REST 

一般代理服务器的实现根据 (URI, HTTP Method) 两元组来决定 HTTP 请求的安全合法性。

当发现类似于(http://localhost:8182/v1/users/{username},DELETE)这样的请求时,予以拒绝。

对于 SOAP,如果我们想借助于既有的代理服务器进行安全控制,会比较尴尬,如下图:


图 5. SOAP 与代理服务器 (Proxy Servers)
REST 

所有的 SOAP 消息经过代理服务器,只能看到(http://localhost:8182/v1/soap/servlet/messagerouter, HTTP POST)这样的信息,如果代理服务器想知道当前的 HTTP 请求具体做的是什么,必须对 SOAP 的消息体解码,这样的话,意味着要求第三方的代理服务器需要理解当前的 SOAP 消息语义,而这种 SOAP 应用与代理服务器之间的紧耦合关系是不合理的。

关于缓存

众所周知,对于基于网络的分布式应用,网络传输是一个影响应用性能的重要因素。如何使用缓存来节省网络传输带来的开销,这是每一个构建分布式网络应用的开发人员必须考虑的问题。

HTTP 协议带条件的 HTTP GET 请求 (Conditional GET) 被设计用来节省客户端与服务器之间网络传输带来的开销,这也给客户端实现 Cache 机制 ( 包括在客户端与服务器之间的任何代理 ) 提供了可能。HTTP 协议通过 HTTP HEADER 域:If-Modified-Since/Last- Modified,If-None-Match/ETag 实现带条件的 GET 请求。

REST 的应用可以充分地挖掘 HTTP 协议对缓存支持的能力。当客户端第一次发送 HTTP GET 请求给服务器获得内容后,该内容可能被缓存服务器 (Cache Server) 缓存。当下一次客户端请求同样的资源时,缓存可以直接给出响应,而不需要请求远程的服务器获得。而这一切对客户端来说都是透明的。


图 6. REST 与缓存服务器 (Cache Server)
REST 

而对于 SOAP,情况又是怎样的呢?

使用 HTTP 协议的 SOAP,由于其设计原则上并不像 REST 那样强调与 Web 的工作方式相一致,所以,基于 SOAP 应用很难充分发挥 HTTP 本身的缓存能力。


图 7. SOAP 与缓存服务器 (Cache Server)
REST 

两个因素决定了基于 SOAP 应用的缓存机制要远比 REST 复杂:

其一、所有经过缓存服务器的 SOAP 消息总是 HTTP POST,缓存服务器如果不解码 SOAP 消息体,没法知道该 HTTP 请求是否是想从服务器获得数据。

其二、SOAP 消息所使用的 URI 总是指向 SOAP 的服务器,如本文例子中的 http://localhost:8182/v1/soap/servlet/messagerouter,这并没有表达真实的资源 URI,其结果是缓存服务器根本不知道那个资源正在被请求,更不用谈进行缓存处理。

关于连接性

在一个纯的 SOAP 应用中,URI 本质上除了用来指示 SOAP 服务器外,本身没有任何意义。与 REST 的不同的是,无法通过 URI 驱动 SOAP 方法调用。例如在我们的例子中,当我们通过

getUserList SOAP 消息获得所有的用户列表后,仍然无法通过既有的信息得到某个具体的用户信息。唯一的方法只有通过 WSDL 的指示,通过调用 getUserByName 获得,getUserList 与 getUserByName 是彼此孤立的。

而对于 REST,情况是完全不同的:通过 http://localhost:8182/v1/users URI 获得用户列表,然后再通过用户列表中所提供的 LINK 属性,例如<link>http://localhost:8182/v1/users/tester</link>获得 tester 用户的用户信息。这样的工作方式,非常类似于你在浏览器的某个页面上点击某个 hyperlink, 浏览器帮你自动定向到你想访问的页面,并不依赖任何第三方的信息。



总结

典型的基于 SOAP 的 Web 服务以操作为中心,每个操作接受 XML 文档作为输入,提供 XML 文档作为输出。在本质上讲,它们是 RPC 风格的。而在遵循 REST 原则的 ROA 应用中,服务是以资源为中心的,对每个资源的操作都是标准化的 HTTP 方法。

本文主要集中在以上的几个方面,对 SOAP 与 REST 进行了对比,可以看到,基于 REST 构建的系统其系统的扩展能力要强于 SOAP,这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持等诸多方面。并且,伴随着 Web Site as Web Services 演进的趋势,基于 REST 设计和实现的简单性和强扩展性,有理由相信,REST 将会成为 Web 服务的一个重要架构实践领域。

重新后端:[Fastify,猫鼬,OAS] REST API入门(样板) 重新后端 先决条件 最新/ LTS 最新。 设置 使用npm i -g yarn全局安装npm i -g yarn 。 使用npm i -g nodemon全局安装npm i -g nodemon 。 将configuration/env.development.js.example复制到configuration/env.development.js并根据已经提供的变量进行配置。 在项目主根目录上运行yarn以安装依赖项。 运行yarn dev启动开发服务器。 额外的 SWAGGER文档可从http://127.0.0.1:3000/api/index.html在本地获得 OAS文档可从http://127.0.0.1:3000/api/docs.html在本地获得 有用的链接 错误与问题 请报告任何问题/错误 我会考虑您对拉动请求的改进,修正(取决于质量) 立即下载

相关推荐

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 389

18-WebService 和 RESTful(1)- WebService

1

一角残叶的博客 757

Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决)

本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。

i0j1k2l3m的博客 646

Restful与webService区别

REST是一种架构风格,其核心是面向资源;WebService底层是SOAP协议,主要核心是面向活动。 相关概念 RESTful: REST是一种架构风格,REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful,核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性,为什么这么说,因为RESTful是无状态的,无状态是指任意一个web请求必须完全与其他请求隔离,是独立的,当请求端提出请求时,请求本身包含了这一请求的全部信.

weixin_45262221的博客 9486

EndNote20保姆级安装教程:从下载到汉化一步到位(附闪退解决方案)

本文提供EndNote20的详细安装与汉化教程,涵盖系统准备、分步安装、路径优化及闪退解决方案。针对科研人员的需求,特别优化了中文环境下的使用体验,确保文献管理工具的高效稳定运行。

weixin_30415113的博客 338

机械臂速成小指南(八):标准DH法实战——从连杆坐标系到运动学方程

本文详细介绍了机械臂运动学建模中的标准DH法,从连杆坐标系的建立到运动学方程的求解,提供了实用的操作步骤和代码示例。通过DH参数表和变换矩阵的构建,帮助读者快速掌握机械臂运动学建模的核心技术,并解决实际应用中的常见问题。

oo7890的博客 211

Web Service与restful比较

一、web Service     1、WebService是什么      web service是一种跨编程语言和跨操作系统平台的远程调用技术, 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。    2、WebService 组成     XML+XSD...

yongshenghuang的博客 4522

15、 深入理解Akka微服务:创建与管理体育博彩平台

本博文深入探讨了如何使用Akka微服务架构为体育博彩平台创建投影和管理事件数据,包括市场投影、投注投影以及数据库投影的实现。同时,介绍了通过gRPC提供HTTP端点以供外部系统访问的方法,并详细说明了在本地环境和Kubernetes中运行应用程序的步骤及配置建议。

weixin_35756624的博客 96

RESTful API

什么是REST? REST全称是Representational State Transfer,中文意思是表述性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。R...

weixin_33874713的博客 486

[Python] -项目实战10- 用 Python 自动化批量重命名文件

本文介绍了使用Python实现文件批量重命名的技术方法。主要内容包括:1)使用os和pathlib模块进行基础文件操作;2)提供多种实用脚本示例,如添加序号、替换字符、添加时间戳等;3)进阶功能包括用户输入和错误处理;4)GUI工具实现方案;5)常见问题与优化建议。文章详细讲解了从简单到复杂的批量重命名实现方法,帮助读者快速掌握这一提高工作效率的技能。建议开发者注意路径处理、错误管理等细节,确保脚本稳健运行。

每日出拳老爷子的博客 815

二十一.基于国民MCU 的增加M4F DSP库调用的验证

Cortex-M4F内核不仅内置硬件FPU单元,还支持多种DSP指令集,比如支持单周期乘加指令(MAC)等。因此Cortex-M4执行所有的DSP指令集都可以在单周期内完成,而Cortex-M3和M0需要多个指令和多个周期才能完成同样的功能。比如开方运算,M3和M0只能通过迭代法(标准数学函数库)计算,而M4F直接调用VSQRT指令完成。参考:\Nationstech.N32G45x_Library.1.1.1\Nationstech.N32G45x_Library.1.1.1\projects\n32g4

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 932

SOAP webserivce 和 RESTful webservice 对比及区别

摘要: 简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),基于“通用”传输协议是 SOAP的一个优点。 简单对象访问协议(Simple Object Access Protocol,S

huojiao2006的博客 1万+

实现基于 Python 和 xterm.js 的 Web 交互终端demo

前端 (HTML):使用 xterm.js 作为前端终端模拟器库。创建了一个 WebSocket 连接到 ws://localhost:8765,这与后端服务器的地址和端口匹配。监听 WebSocket 消息,并将数据写入终端。同时监听用户输入并发送到服务器。后端 (Python):使用 websockets 库来创建 WebSocket 服务器,监听端口 8765。使用 paramiko 库来创建 SSH 客户端并连接到指定的远程服务器。

u010674101的专栏 873
上一篇: JSON 入门指南
下一篇: DES原理分析
wangshfa
博客等级 码龄17年 117粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值