rpc 跟 restful 之间有什么关系 ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
fangcan

rpc 跟restful 之间有什么关系 ?

  •  
  •   fangcan Jul 15, 2020 5264 views
    This topic created in 2114 days ago, the information mentioned may be changed or developed.

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

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

    疑问的地方:

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

    求各位老哥解答

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

    我印象最深刻的,是这里面 易哥 的回答
    Aethyr
        15
    Aethyr  
       Jul 15, 2020
    RPC 是一种泛指,Http 只是一种协议,可以通过 http 协议来实现、比如 gRPC 。
    REST 只是 Http 的一种设计风格,跟 RPC 没有必然的联系。
    前后端分离跟 REST 和 RPC 更没有关系。
    另外,虽然拥趸很多,但是 RESTful 风格的接口在国内几乎没有见过。
    js8510
        16
    js8510  
       Jul 16, 2020
    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
        17
    sxy960806  
       Jul 16, 2020 via Android
    @kenzi 资源的命名一般用单数还是复数呢?比如我看 github 的 v3api,就是 projects,而 auth 这种不可数的名词没有复数,user 有复数但写成 users 有点奇怪。比较纠结。。。
    kenzi
        18
    kenzi  
       Jul 16, 2020
    @sxy960806 上面我是随手写的,具体 project 里,我们一般用复数比较多
    libook
        19
    libook  
       Jul 16, 2020   1
    技术圈有个鸭子定律,就是走起来像鸭子、叫起来像鸭子、长得像鸭子,那就可以称之为鸭子。

    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
        20
    fangcan  
    OP
       Jul 17, 2020
    @libook 也就是我所在的项目的前后端分离其实就是 “普通的前端应用以 http 调用后端服务”,调用方式也不是 rpc ;后端服务提供的服务也不是 rest 风格 是这样么?/div>
    libook
        21
    libook  
       Jul 17, 2020
    @fangcan 你没有说实现细节,所以我也无法判断。

    RPC 、REST 、前后端分离,三者之间没有任何联系,不互相依赖,也可以共存。就好比是车辆、汽油发动机、出行三者的关系;车辆可以用汽油发动机,也可用柴油发动机甚至电动机;汽油发动机可以给汽车用,也可以给船和发电机用;出行可以选择乘车,也可以选择乘船和飞机甚至自行车。

    RPC 和 REST,一个是针对调用的方式,另一个是针对通信方式,分别看。

    RPC 的精髓是,业务逻辑不需要关心本地的这个方法是如何实现和服务器通信的,本质上是对调用过程的一种封装,这样业务逻辑只需要关心自己的业务逻辑,RPC 只需要关心如何实现远程调用,两者隔离。

    REST 只是一种 API 的设计风格,只要你服务端的 API 风格符合 REST 的特征,那就算是用了 REST 风格。

    所以你搞清楚了之后可以自己判断一下,你现在是否在用 RPC 以及 REST 。

    不过我觉得你目前的思路是本末倒置的。不应该是先做完了一个设计再回过头来看做法是不是符合某种技术的特征;而是应该先分析需求,然后为了更科学地实现需求,根据不同技术的特征来选择其中最合适的来实现。
    About     Help     Advertise     Blog     API     FAQ     Solana     3198 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 81ms UTC 13:45 PVG 21:45 LAX 06:45 JFK 09:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86