V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alangz
V2EX  ›  程序员

问一个可能有点愚蠢的问题

  •  1
     
  •   alangz ·
    xyalan · 2015-04-17 17:44:52 +08:00 · 3704 次点击
    这是一个创建于 3499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直以来对RPC和REST Service的区别有一些疑惑,REST Service用的比较多还算明白。对于RPC,知道有实现了它的框架,例如Thrift。单就Thrift和RESTful API来说,两者着都可构建跨语言的调用。那么Thrift相比RESTful API有何优势,应用场景有哪些?

    6 条回复    2015-04-19 01:03:44 +08:00
    mucid
        1
    mucid  
       2015-04-17 17:54:58 +08:00   ❤️ 1
    Thift是二进制传输协议性能好吧,
    Rest一般是HTTP上实现的一套规范,只是规范,
    终究还是HTTP通行完备可靠性好,可以传输复杂的数据
    alangz
        2
    alangz  
    OP
       2015-04-17 17:59:42 +08:00
    这里的RESTful API特指构建于JSON-HTTP上的
    kaneg
        3
    kaneg  
       2015-04-17 18:20:31 +08:00 via iPhone   ❤️ 1
    以下是个人的一些理解:RPC只是一种思路,具体数据格式和传输手段可以多种多样,例如基于http的xml rpc,笼统的说soap等web service也可以说是一种rpc。而restful则是比较狭义的基于http的get/put/post等语意的一种交互手段
    oclock
        4
    oclock  
       2015-04-17 21:43:20 +08:00   ❤️ 1
    RESTful和thrift不是一个维度范畴的东西
    你可以拿RESTful跟SOAP比较
    或者thrift与protobuf比较
    非要说RESTful与thrift比有何优势
    好比问福克斯与米其林比有何优势
    alangz
        5
    alangz  
    OP
       2015-04-18 22:39:39 +08:00
    @oclock protobuf仅仅是一个序列化协议吧,thrift实现了RPC,而且thrift好像也可以使用protobuf,这两个也没有可比性,个人认为。
    JamesRuan
        6
    JamesRuan  
       2015-04-19 01:03:44 +08:00
    看来还是没理解REST的精髓。

    REST是没有链接层面客户端与共享的服务器端状态的,所有的状态都是通过资源的表现层明文体现,而REST则是操作这种表现层的一种规范。

    RPC说的大概是:
    C:服务器,你那里有一个我的一个资源,你帮我做一下我们之前约定f的改动吧!
    S:好的,根据约定f,改动成功,结果如下。

    而REST说的大概是:
    C:服务器,这个资源我要这样用,你用r的表现方式返回这个资源实例的内容吧!
    S:好的,r表现方式下是这样的。
    C:(改动了资源在r表现方式下的内容),服务器,把这个按照r表现方式的内容做为这个资源的实例存起来吧!
    S:好的,已经存好了。

    RPC下,服务器知道如何改动资源的N种方式,这些需要和客户端共享,每个链接中都需要维护资源状态的改变。
    REST下,服务器不知道资源如何改动,只知道资源的表现层要如何读写;至于实际资源表现层变动后,低层的逻辑如何变化,客户端不需要和服务器共享,服务器自己知道就好了,客户端只要知道,服务器报告它OK的时候,对其他相关连的资源的表现层内容已经变化了;对客户端来说只需要被操作资源的表现层状态转移OK了,而不需要在意资源间的内部联系的状态转移。

    你可以用RPC的方式去实现一个REST,完全没有问题,只需要做到REST规范的那些就行了。

    核心就是,客户端别去指挥服务器去做表现层以外的东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.