Skip to content

09 RESTful服务(上):从面向过程编程到面向资源编程

你好,我是周志明。前面两节课,我们学习了远程方法调用RPC,今天我们接着学习另一种主流的远程服务访问风格:RESTful服务。

REST与RPC的对比

很多人都会拿REST来跟RPC对比优劣,其实,无论是思想上、概念上,还是使用范围上,REST与RPC都不完全一样,它们在本质上并不是同一个类型的东西,充其量只算是有一些相似,在应用中会有一部分功能重合的地方。

REST与RPC在思想上存在差异的核心,是抽象的目标不一样,也就是面向资源的编程思想与面向过程的编程思想之间的区别。

面向过程编程和面向对象编程,想必你应该都听说过,但什么是面向资源编程呢?这个问题等我一会儿介绍完REST的特征之后,再回头细说。

那么,二者在概念上的不同,是指REST并不是一种远程服务调用协议,甚至我们可以把定语也去掉,它就不是一种协议。

因为协议都带有一定的规范性和强制性,最起码也该有个规约文档,比如JSON-RPC,它哪怕再简单,也要有个《JSON-RPC Specification》来规定协议的格式细节、异常、响应码等信息。但是REST并没有定义这些内容,虽然它有一些指导原则,但实际上并不受任何强制的约束。

经常会有人批评说,某个系统接口“设计得不够RESTful”,其实这句话本身就有些争议。因为REST只能说是一种风格,而不是规范、协议,并且能完全达到REST所有指导原则的系统,也是很少见的。这个问题我们会在下一讲中详细讨论。