知识卡片

REST与RPC的本质差异是面向资源还是面向过程

普通读书笔记卡

内容

REST常被拿来和RPC比较优劣,但两者其实不是同类事物。思想上,RPC是面向 过程的抽象——围绕”远程方法”设计交互,调用者要学习每一个独立的方法签名; REST是面向资源的抽象——把数据本身当作抽象主体,行为收敛成一套统一的 接口。概念上,RPC通常有明确的协议规约(哪怕JSON-RPC这么简单也有规范 文档),而REST并不是一种协议,只是一组指导原则,没有强制约束,所以”某 接口设计得不够RESTful”这种批评本身就有争议空间——世上完全满足REST所有 原则的系统也不多见。使用范围上,两者确有重合但边界模糊:追求分布式对象 的场景与REST基本无关;追求极致调用效率的场景(如服务集群内部节点通信) 通常也会排除REST,因为它绑定在应用层的HTTP协议之上,无法像RPC那样直接 控制传输层细节;REST真正擅长的地盘是浏览器/移动端/桌面端这类对协议、 序列化选择余地不大、更看重通用性和无须额外客户端支持的场景。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第2章"访问远程服务"2.2节 "REST设计风格"(源文件:_epub-src对应OEBPS/Text/chapter19.xhtml) - 结论依据:原文明确"REST与RPC在思想上差异的核心是抽象的目标不一样,即 面向过程的编程思想与面向资源的编程思想两者之间的区别",并说明REST不是 协议、没有强制约束,进而分析二者在分布式对象、高性能场景、浏览器端的 使用范围差异,直接支撑本卡片结论。 - 原始内容:REST无论是在思想上、在概念上,还是在使用范围上,与RPC都不 尽相同,充其量只能算是有一些相似……REST并不是一种远程服务调用协议, 甚至可以把定语也去掉,它就不是一种协议。