REST 与 RPC - *实际目的*差异
REST vs RPC - *Actual purpose* differences
当 REST 已经流行时,我开始编写 Web 应用程序和分布式应用程序,所以我实际上从未使用过 RPC。
在搜索它们之间区别的简单解释时,我开始明白了,但是一些例子让我感到困惑。
我看到了这样的事情:
GET /getLastUser
或者这个:
POST /changeUserName
如果 REST 用于资源,而 RPC 用于过程,那么将 RPC 用于这样的事情不是一种不好的做法吗?
如果我错了请纠正我,但在我看来,RPC 应该更纯粹的功能性。
这意味着调用过程应该总是:
- return相同参数的相同结果
- 不影响状态
因此,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 服务。
当 REST 已经流行时,我开始编写 Web 应用程序和分布式应用程序,所以我实际上从未使用过 RPC。
在搜索它们之间区别的简单解释时,我开始明白了,但是一些例子让我感到困惑。
我看到了这样的事情:
GET /getLastUser
或者这个:
POST /changeUserName
如果 REST 用于资源,而 RPC 用于过程,那么将 RPC 用于这样的事情不是一种不好的做法吗?
如果我错了请纠正我,但在我看来,RPC 应该更纯粹的功能性。
这意味着调用过程应该总是:
- return相同参数的相同结果
- 不影响状态
因此,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 服务。