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实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值