Restful、SOAP、RPC、SOA到底有什么区别

2022-12-04 13:29:45 浏览数 (1)

之前阿粉的小迷妹一直说,为什么有些面试官很喜欢问这个 Restful、SOAP、RPC、SOA 之间的区别,而回答的时候,总是回答的没有那么的好,于是就想让阿粉给她解答一下这个内容,于是阿粉专门来写一篇文章来进行这个解答。

什么是 Restful

Restful(Representational State Transfer)是⼀种架构设计⻛格,提供了设计原则和约束条件,⽽不是架构,⽽满⾜这些约束条件和原则的 应⽤程序或设计就是 Restful架构或服务。

也就是说,他并不是说是一种架构,而是一种设计上的风格,就类似那种约定俗成的,阿粉最早知道这个 Restful 的时候,还是之前看过大神阮一峰的博客才学习到的。

其实想要理解Restful,那么你得先知道 Restful 的主要设计原则,那么 Restful 的主要设计原则都有哪些?

  • 资源与URI
  • 统⼀资源接⼝(HTTP⽅法如GET,PUT和POST)
  • 资源的表述
  • 资源的链接
  • 状态的转移

实际上,REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。

**资源与URI

这时候就会有读者问,那这个资源又是怎么定义的呢?

这个资源实际上就相当于是一个抽象的概念,只要你这个事物,有被引用到的地方,那么他就可以定义成为一个资源,就比如我们的姓名,手机号,

  • 警察落户需要你的姓名
  • 办理某些会员卡需要你的姓名
  • 你在办理会员卡的时候,需要绑定一下手机号

也就是说,你的姓名和你的手机号,都有被引用得到的地方,那么他就可以称之为资源。

那么什么又是URI呢?

要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。

这个对开发来说就很容易理解了,URI 就是地址

  • https://www.baidu.com/
  • https://www.taobao.com/
  • https://www.jd.com/

统⼀资源接⼝

那么什么是统一资源接口呢?

这就又得说到 Restful 架构设计⻛格的定义上来了,遵循的原则还是,遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。

如果这么说,大家我相信那是明白的非常透彻的,毕竟你看,你写接口的时候,直接来的不就是

代码语言:javascript复制

@PostMapping(value = "/order/create", produces = MediaType.APPLICATION_JSON_VALUE)
public JsonObjcet createOrder(){
      .....
}

是不是都是这么写的,实际上他就是一种 Restful 风格的。

至于请求的状态码,阿粉就不再多说什么了,相信只要是看阿粉文章的,百分之百也都明白状态码一般对应什么样子的含义。

资源的表述

那么什么是资源的描述呢?

这个理解就比较简单了,为什么这么说,你可以这样理解,只关心你给的返回内容,不关心你内部实现。

换成比较官方的语言就是:

客户端获取的只是资源的表述而已。资源在外界的具体呈现,可以有多种表述(或称为表现、表示)形式,在客户端和服务端之间传送的也是资源的表述,而不是资源本身。例如文本资源可以采用html、xml、json等格式,图片可以使用PNG或JPG展现出来。

其实资源的描述阿粉觉得他就是数据展示,但是很多人也不是这么理解,毕竟每个人的理解都是不一样的,也没有什么标准答案,毕竟不是 1 1=2 的数学问题,不是么?

资源的链接

资源的链接,这个相对来说,也挺容易理解的,一般的,我们在项目里面,很多都是从一个链接去到另外一个链接,获取我们的想要的资源信息,比如说,我们有一个活动,如果你想要获取这个活动的最新详情,那么就一定需要我们再去对这个资源进行一个获取,实际上如果简单来说,就是对资源做了个CRUD。

状态的转移

实际上,我们在看某些页面的时候,一直在默默的接受这个状态转移,比如,“下一页”,因为这个 “下一页” 就会表示,你从当前的这个状态,转到下一个未知的状态, 这实际上就是状态的转移。

**什么是SOAP

相对来说 SOAP 就不如 Restful 那么复杂了,需要你理解的东西没那么多了。

简单对象访问协议是⼀种数据交换协议规范,是⼀种轻量的、简单的、基于XML的协议的规范。

SOAP协议和HTTP协议⼀样,都是底层的通信协议,只是请求包的格式不同⽽已,SOAP包是XML格式的。SOAP的消息是基于xml并封装成了符合http协议,因此,它符合任何路由器、 防⽕墙或代理服务器的要求。

SOAP可以使⽤任何语⾔来完成,只要发送正确的soap请求即可,基于soap的服务可以在任何平台⽆需 修改即可正常使⽤

**什么是RPC

RPC就是从⼀台机器(客户端)上通过参数传递的⽅式调⽤另⼀台机器(服务器)上的⼀个函数或⽅法 (可以统称为服务)并得到返回的结果。

RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)

RPC 是⼀个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的⼯作⽅式)

RPC 在使⽤形式上像调⽤本地函数(或⽅法)⼀样去调⽤远程的函数(或⽅法)。

其实说到RPC,这个属实是面试的时候,经常会被问到的一个地方,为什么这么说,因为有很多很多的框架,都是用的 RPC 。

比如已经进入 Apache 孵化器的 Dubbo ,还有还有SpringCloud框架,微服务全家桶。这都是比较出名的用 RPC 的框架,但是很多人就会说,别瞎扯了,人家SpringCloud 明明是用的 http ,确实,也没啥错误。

spring cloud是基于spring boot 的,spring boot 实现的是http协议的rpc,算是rpc的⼀个⼦集。

所以阿粉在这里也把 SpringCloud 给算进来了。

什么是SOA

说到SOA,英文全称是((Service-Oriented Architecture),翻译成中文就是⾯向服务的架构。

这就是最经典的微服务架构了,微服务架构就是从 SOA 进化的结果。

两者说到底都是对外提供接⼝的⼀种架构设计⽅式,随着互联⽹的发展, 复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。

通俗点来讲,SOA提倡将不同应⽤程序的业务功能封装成“服务”并宿主起来,通常以接⼝和契约的形式暴 露并提供给外界应⽤访问(通过交换消息),达到不同系统可重⽤的⽬的。

SOA是⼀个组件模型,它能将不同的服务通过定义良好的接⼝和契约联系起来。服务是SOA的基⽯。

所以后面就出现了这个微服务了。

今天阿粉要说的内容,就这些了,你理解了么?

文章参考

《百度百科》

《RESTful Web Services》

0 人点赞