REST和RESTFul
其实无论是RPC、RESTFUL、还是GraphQL,都和REST这个词有千丝万缕的关系的。所以在文章的开篇,先简单介绍下REST和RESTFul。REST和RESTFul这两个词经常会出现在开发者的眼中,我相信很多开发者都不知道它们的区别是什么,也有很多开发者认为REST就是RESTFul。那么它们真的就是一个东西吗?下面我们就来探究下它们之间的关系。
REST
REST的全称是:Representational State Transfer ,它的直接中文翻译是:表现层状态转移。这个词,基本上没什么人能直接看懂它表达的意思。从系统架构的角度上来讲,它表示一种分布式超媒体系统的架构风格。也就是说,它代表一种系统架构的风格。在这里我们不深入讨论REST架构是怎样的,我们只需要知道,现在大部分人接触的前后端分离的架构一般都是REST风格的就行了。
RESTFul
那RESTFul又是什么呢?RESTFul是指:基于REST架构风格的Server端为其它组件(这个其它组件可以是前端应用,也可以是其它后端系统)提供交互的一个统一接口。这样做的目的是,简化整体系统架构,改善交互的可见性。也避免了Server端组件的内部逻辑泄露到其它组件的可能性。实现Server端与它提供的服务解耦的目标,这使组件之间独立演进成为了可能。
从架构角度来看,我们所说的解耦一般被会理解为:前后端解耦,又或者后端服务和后端服务之间的解耦。但是从REST的架构上来说,它其实是指:Server端与它提供的服务解耦。这样带来的好处是:提供的服务是可信任的,不会因为Server的演变而发生改版。这是Rest架构的一个非常重要的特点。
简单来说,我们最常见的基于HTTP协议的服务端接口、API等,就是我们说的RESTFul接口。
RPC
RPC的全称是Remote Procedure Call,即远程过程调用,与之对应的是本地过程调用。为了方面大家理解什么是RPC,我们先通过简单的代码来看看本地过程调用是怎样的。
int x = -100;
int y = -99;
int result = Math.max(x, y);
System.out.println("max = " + result);
调用 Math.max
就是一个本地过程调用。即通俗来讲,我们调用我们本地代码中的提供的一些API的过程,就称为本地过程调用。
远程过程调用,最终调用的API不是运行在本地的。这个提供服务的程序有可能是运行在不同进程,甚至是不同机器上的。RPC的调用过程从代码上来看,和我们调用本地的代码其实