rpc 跟 restful 之间有什么关系 ?

2020-07-15 11:16:33 +08:00
 fangcan

目前的项目是前后端分离,后端用 springmvc,前端用 vue,基于 http 交互。

后端接口定义的格式 像 rpc 风格 比如:getUserInfo,queryStoreCouponList

疑问的地方:

  1. 像这种前后端分离的结构属于 restful 还是 rpc 还是 都不属于?
  2. rpc 跟 restful 之间有什么关系、区别?

求各位老哥解答

4275 次点击
所在节点    程序员
21 条回复
ChanKc
2020-07-15 11:19:21 +08:00
前后端分离和 restful rpc 都没有关系
hantsy
2020-07-15 11:25:29 +08:00
Java EE 标准中原来有一个 XML RPC,从 Jakarta EE 9 正式标注为 Pruned,删除。
基于 SOAP WebService 的相关标准,标注为 Optional,不是强制要求 Provider 实现。
剩下的只有 JAXRS,基于 REST 的 WebService 了。
roundRobin
2020-07-15 11:33:51 +08:00
RPC 指的是利用暴露的函数接口通讯的模式,REST 是利用标准接口访问资源的设计模式,前者对内提供微服务,后者对外提供用户服务,前后端分离是项目的设计模式,要具体到内部通讯和外部访问才能和 RPC 或者 REST 扯上关系
kenzi
2020-07-15 11:37:22 +08:00
再加一点,getUserInfo 这种对于 rest 来说应该是 GET /user/{id}
gabon
2020-07-15 11:38:18 +08:00
HTTP 也是 rpc
baiyi
2020-07-15 11:43:24 +08:00
@gabon #5 "HTTP is not RPC" —— Fielding Dissertation
zarte
2020-07-15 11:44:41 +08:00
rpc 可以使用 http 协议那就跟 restful 差不多了,但是 rpc 可以自定义协议达到更小的包等优势。
useben
2020-07-15 11:57:20 +08:00
一句话, 一个是协议, 一个是设计模式
iX8NEGGn
2020-07-15 13:00:27 +08:00
后端服务之间远程调用目前两大主流分别是 rpc(远程过程调用) 和 RESTful 风格的 http,rpc 一般工作在应用层以下,而 http 是应用层协议,RESTful 只是 http 调用的一种风格和 rpc 没关系,你前后端交互 API 设计也可以用 RESTful 风格,前后端分离是一种软件设计模式和 RESTful 或 rpc 都没关系
limuyan44
2020-07-15 13:14:22 +08:00
java 和 javascript 什么关系他们就什么关系
Variazioni
2020-07-15 13:25:28 +08:00
@limuyan44 哈哈哈哈
qq1340691923
2020-07-15 17:22:50 +08:00
@limuyan44 没关系
fangcan
2020-07-15 17:48:44 +08:00
@roundRobin 请教下,前端系统能不能理解为一个只调用接口不开放接口的后端程序?
nthhdy
2020-07-15 18:11:48 +08:00
https://www.zhihu.com/question/41609070

我印象最深刻的,是这里面 易哥 的回答
hcx0
2020-07-15 19:50:02 +08:00
RPC 是一种泛指,Http 只是一种协议,可以通过 http 协议来实现、比如 gRPC 。
REST 只是 Http 的一种设计风格,跟 RPC 没有必然的联系。
前后端分离跟 REST 和 RPC 更没有关系。
另外,虽然拥趸很多,但是 RESTful 风格的接口在国内几乎没有见过。
js8510
2020-07-16 06:00:56 +08:00
RPC: Remote procedure call. restful : Web services that conform to the REST architectural style, called RESTful Web services. 所以 RPC 有很多实现,http,thrift, grpc 等等。restful 是一种 RPC 设计规范。 用 wiki 的话说, 叫 set of constraints to be used for creating Web services. 所以关系大概就是 OS 和 POSIX 的关系。
sxy960806
2020-07-16 09:48:52 +08:00
@kenzi 资源的命名一般用单数还是复数呢?比如我看 github 的 v3api,就是 projects,而 auth 这种不可数的名词没有复数,user 有复数但写成 users 有点奇怪。比较纠结。。。
kenzi
2020-07-16 10:39:09 +08:00
@sxy960806 上面我是随手写的,具体 project 里,我们一般用复数比较多
libook
2020-07-16 11:21:48 +08:00
技术圈有个鸭子定律,就是走起来像鸭子、叫起来像鸭子、长得像鸭子,那就可以称之为鸭子。

RPC 全程是 Remote Procedure Call,中文可以翻译成远程过程调用,所以只要是一个程序里像调用自己的过程一样去调用另外一个程序里的过程(可能是同一台机器上的,也可能是不同机器上的),那么就可以被称之为 RPC 技术。

REST 是一中 API 设计风格(不是标准,不是标准,不是标准),这种风格是 Roy Fielding 博士于 2000 年发布的论文里提出的,用于解决一些 API 设计问题的风格,感兴趣可以看一看论文原文,篇幅很短。

REST 是基于 HTTP 来设计的,HTTP 是超文本传输协议,用于实现客户端(浏览器)与服务端之间的数据通信。

假设你的 VUE 页面以 REST 风格通过 HTTP 这个协议来与服务端的 SpringMVC 程序进行通信,同时 VUE 页面中将这个通信过程封装成了本地的方法,能实现页面业务逻辑可以直接调用本地方法,最终实现与服务器的数据交换;那么就可以说:
- 这个可以用于与服务器交换数据的方法是一种 RPC 技术。
- 此 RPC 技术底层使用 REST 风格的 HTTP API 来实现。
fangcan
2020-07-17 11:59:15 +08:00
@libook 也就是我所在的项目的前后端分离其实就是 “普通的前端应用以 http 调用后端服务”,调用方式也不是 rpc ;后端服务提供的服务也不是 rest 风格 是这样么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX