REST 与 RPC - *实际目的*差异

REST vs RPC - *Actual purpose* differences

当 REST 已经流行时,我开始编写 Web 应用程序和分布式应用程序,所以我实际上从未使用过 RPC。

在搜索它们之间区别的简单解释时,我开始明白了,但是一些例子让我感到困惑。
我看到了这样的事情:

GET /getLastUser

或者这个:

POST /changeUserName

如果 REST 用于资源,而 RPC 用于过程,那么将 RPC 用于这样的事情不是一种不好的做法吗?

如果我错了请纠正我,但在我看来,RPC 应该更纯粹的功能性。
这意味着调用过程应该总是:

因此,RPC 调用如下:

GET /addTwo?num=5

return 是这样的:

{
    "result": 7
}

对我来说似乎更合乎逻辑(尽管这是一个非常简单的例子)。

如果这个问题因为过于"opinion-based"而被关闭,我就会知道我应该做任何我想做的事...

RPC 并不意味着具有功能性。调用同一个过程两次不能保证结果。

这个问题可以用几种不同的方式回答,而且很深。我认为这可能是一个公平的总结。

  • 对于 RPC,原语通常是函数名称、参数和结果。
  • 对于 REST,原语是 'resource representation'。

因此,在使用 RPC 调用函数的地方,在 REST 中,您实际上是在发送和检索资源的状态,而不管协议如何。

这意味着您通常只询问服务器 'can you give me the state of this resource',或者告诉服务器“这是一个新的资源状态,请将其存储在这个位置”。 REST 给出的唯一成功答案是 "the current state" 或 "this operation worked",但对于 RPC,问题(函数 + 参数)和答案(结果)可以是任何东西。

因此您可以争辩说,当您这样描述时,RPC 更加灵活。可能是这样,但是因为 REST 将自己局限于传输状态,所以您可以获得很多简单的基于 RPC 的协议无法提供的保证。

REST 不仅仅是传输状态。使用超链接是将服务称为 REST 的另一个重要要求,这也是使用 RPC 无法获得的 'out of the box'。

最后,可以说 HTTP 本身就是一个类似 RPC 的协议。我认为可以在任何 RPC 服务之上构建 RESTful 服务。