开发者社区> x64.ink> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RESTful API 最佳实践
RESTful API 最佳实践
46 0
Elasticsearch:RESTful风格API
Elasticsearch:RESTful风格API
42 0
无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口
采用抽象工厂设计模式,可以无缝切换不同类型的数据库,从crudapi 1.3.0版本开始,添加了对大象数据库PostgreSQL的支持。并且以学生对象为例,零代码实现了CRUD增删改查RESTful API,后续计划支持更多的数据库,比如Oracle,MSSQL Server,Mongodb等。
84 0
OSS restful API 调用 get,遍历目录中的文件,python发http request示例
发送get 请求,遍历目录下的所有文件,代码中*** 的部分改成实际内容,这个API说明文档在bucket操作里面。rest请求主要问题在拼header时authorization可能会有问题,注意计算签名时的入参。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib impo
168 0
OSS restful API 调用 Delete,删除文件,python发http request示例
发送delete 请求删除bucket中的文件,代码中*** 的部分改成实际内容。rest请求主要问题在拼header时authorization可能会有问题。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib import base64 import datetime im
157 0
RESTful API如何进行版本控制
本文将帮助您理解为什么需要版本控制,以及如何对REST API进行版本控制。我们将讨论4种版本控制的方法,并比较不同的方法。
88 0
RESTful API最佳实践(笔记)
RESTful API最佳实践
1670 0
Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
目录 目录 Paste PasteDeploy Routes WebOb 简介 WSGI入口 Paste和PasteDeploy 配置文件 pasteini 中间件的实现 Routes WebOb 参考资料 Paste + PasteDeploy + Routes + WebOb 简介 Paste + PasteDeploy + Routes + WebOb 这几个模块组合构成了 Openstack Restful API 的开发框架。
1097 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路
立即下载
数据智能人机交互实践
立即下载
低代码开发师(初级)实战教程
立即下载