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

目录
相关文章
|
3月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
5月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
7月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
376 30
|
7月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
296 16
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
723 108
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
442 5
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
275 2
|
负载均衡 Java 开发者
Spring Cloud 远程调用:为何选择 HTTP 而非 RPC?
【10月更文挑战第1天】在微服务架构中,远程服务调用是一个核心环节。面对HTTP和RPC(Remote Procedure Call,远程过程调用)这两种通信协议,Spring Cloud 选择了HTTP作为其主要通信手段。本文将深入探讨Spring Cloud选择HTTP而非RPC的原因,以及这一选择在实际工作中的优势。
399 0
|
负载均衡 API 数据格式
RPC和HTTP的区别?
RPC和HTTP的区别?
956 0
|
5月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。