RESTful还是基于HTTP的RPC实现

简介:

前言:

对于目前的互联网应用,分布式几乎是必备的架构。既然是分布式,不同服务之间的通讯自然就必不可少。比如淘宝就是使用了HSF框架以及消息中间件notify,metaQ。不过,分布式的规模要达到淘宝这种量级的恐怕并不多。所以大部分应该还是使用较为简单的一些实现方法。

比如说,这个RESTful风格。从网上的资料大概知道,它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。

对于HTTP来作为通讯,我认为是一个不错的方案,因为目前大多语言的标准库应该都是提供了HTTP的支持,而且HTTP这种无状态的请求,也容易接受。比起Socket通信,相对要易用,而且测试也比较方便甚至可以直接用浏览器来访问。

不过,对于RESTful,我并不是非常喜欢,总感觉它有点别扭。

什么是RESTful:

一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEADER 和 OPTIONS。

它的一个重点在于,充分利用了HTTP的POST,PUT,DELETE等方法的含义。

关于RPC:

RPC(Remote Procedure Call Protocol)就是远程调用。远程调用免不了消息通信,所以本质上都是一种通信。RPC应该有各种各样的协议,基于或扩展与socket,HTTP等协议。前面说了,如果不是为了速度,应该不大会有人用socket,毕竟略有开发难度。比如淘宝的HSF也是基于HTTP的通信。

所以,最简单的想法,应该就是把HTTP协议当做RPC来用。比如我们把网址作为一个借口,传入的参数作为函数参数,response的数据作为返回信息。这其实就是一个调用。

所以,我一直不明白的是,用这种接口和一般的函数库调用一样,感觉很容易理解。而且目前的消息通信,用json基本可以通用。为什么还需要RESTful这种协议呢?

二者对比:

对于面向对象:

我觉得RESTful和RPC最大的区别应该就是面向对象了。对于RESTful而言,这个链接其实就是个对象,我可以增删改查,这些东西是HTTP自带的。

但似乎更多的操作我们没法通过这几个方法来描述呢,那不就又落回到RPC了么。

对于开发难度:

我觉得可能很多人只知道GET和POST,因为现在最常用的就是GET和POST了。虽说这应该是违背了HTTP设计的初衷。

如果我们用上RESTful,那么开发者就需要理解另外几种不常用的方法。当然,如果你说可以有现成的库啊,那当我没说。

对于返回值:

RESTful使用了HTTP的4xx,5xx的那些错误定义。相当于HTTP定义了这些错误,供开发者识别。

但实际上,业务肯定会自己定义错误标示。那么,你不觉得那些编号反而会有干扰。不知道的还以为是网络连接有问题,没想到只是请求错误。

转载请注明:旅途@KryptosX » RESTful还是基于HTTP的RPC实现

目录
相关文章
|
2月前
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
2月前
|
缓存 安全 API
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
411 0
|
2月前
|
网络协议 JavaScript 安全
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
|
7天前
|
网络协议 Dubbo Java
什么是RPC?RPC和HTTP对比?RPC有什么缺点?市面上常用的RPC框架?
选择合适的RPC框架和通信协议,对于构建高效、稳定的分布式系统至关重要。开发者需要根据自己的业务需求和系统架构,综合考虑各种因素,做出适宜的技术选型。
21 1
|
12天前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
14天前
|
开发框架 网络协议 Java
RPC调用和HTTP调用的区别你知道吗
RPC调用和HTTP调用的区别你知道吗
|
2月前
|
网络协议 Java 程序员
SpringCloud 远程调用为啥要采用HTTP,而不是RPC?
关于SpringCloud远程调用采用HTTP而非RPC。
90 0
|
2月前
|
前端开发 API 网络架构
RESTful接口与http协议状态表述
该文介绍了RESTful风格API的好处和设计原则。RESTful API以资源为中心,通过HTTP方法(GET, POST, PUT, DELETE)表示操作,利用状态码反馈操作结果。它简化了客户端与服务端的交互,提供了一种通用规范,减少沟通成本。设计要点包括:URI描述资源,HTTP方法体现操作,使用标准HTTP状态码,GET不改变数据,使用复数名词,支持复杂资源关系,可选实现HATEOAS,以及接口版本管理。
|
2月前
|
网络协议 安全 API
计算机网络 TCP、RPC、GRPC、HTTP 总结
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 总结
|
2月前
|
缓存 网络协议 安全
tcp、http、rpc和grpc得一些个人总结
tcp、http、rpc和grpc得一些个人总结
110 0