当REST已经流行时,我开始编写Web应用程序和分布式应用程序,所以我实际上从未使用过RPC。
在寻找它们之间差异的简单解释时,我开始……
RPC并不意味着功能。两次调用相同的过程不能保证结果。
这个问题可以用几种不同的方式回答,而且非常深刻。我认为这可能是一个公平的总结。
因此,在RPC中你可以调用一个函数,在RPC中你实际上是在发送和检索资源的状态,而不管协议如何。
这意味着您通常只询问服务器'你可以给我这个资源的状态',或者告诉服务器'这里是一个新的资源状态,请将它存储在这个位置'。 REST将给出的唯一成功答案是“当前状态”或“此操作有效”,但使用RPC时,问题(函数+参数)和答案(结果)可以是任何东西。
所以你可以争辩说,当你这样描述时,RPC更灵活。它可能是,但由于REST仅限于传输状态,因此您可以获得许多基于RPC的协议无法提供的保证。
REST不只是关于转移状态。使用超链接是服务被称为REST的另一个重要要求,这也是你不能通过RPC获得“开箱即用”的东西。
最后,可以说HTTP本身就是类似RPC的协议。我认为可以在任何RPC服务之上构建RESTful服务。