好烦啊,分不清REST RPC RESTful的区别,所以只能翻译一篇谷歌的文章,括号中是我的补充

原文连接 REST vs RPC - What is RESTful?

注意需要科学上网

二 译文

在所有的编程开发中,很少有术语像REST那样,包含太多无意意义(buzzwordized )或者过量定义(overdefined)。最常见的误解之一,使用HTTP动词(如GET,PUT,POST),而不是使用SOAP绑定网站前端服务器的任何设计框架都称为“RESTful”。这种模糊的REST和XML-RPC(或JSON-RPC等)界限,对实践造成了一些非常严重的后果。

因为误解REST而开发的POX(Plain Old XML)网络服务,有很多 web api实现并没有完全了解REST框架,从而没有真正用到RESTful API的简单性和禅性(相反认为RESTful更加的麻烦)

REST vs RPC

REST不是像WCF这样的框架,HTTP这样的协议,JAX-RS这样的框架,SOAP这样的通信格式。REST是一种设计原则,是一种表示软件解决方案的结构化方式 - 特别是将解决方案的各个方面暴露给客户端消费者。REST的核心原则是各个方法的返回可以建模为客户端可以使用或采取行动的资源。REST的核心原则是解决这些方面的问题,可以被建模成被客户端消费理解的返回对象。

这种面向资源的思想,而不是客户端和服务器之间通信的实现细节,实际上就是REST的全部内容。 这是在http实现的RESTful API与RPC的关键区别。

Why is this(RESTful ) important?

RESTful方法使我们能够将我们的页面对象一致,并在阶级式的URL上有可预测的语义松散地映射到CRUD。 同样,HTTP带有标准错误代码,MIME(Multipurpose Internet Mail Extensions)类型可以完成大部分繁重工作。因此我们不需要维护一个经常被修改的面向用户的开发项目,并从中享受RESTful带来的好处
 
请考虑以餐馆中的订单场景进行建模,设计HTTP API
-RPC API以“动词”的形式思考,将餐厅功能公开为接受参数的函数调用,并通过最合适的HTTP动词调用这些函数,例如前端的“得到”对应后端的查询等等,并且与实际功能没有实际关系,因为您每次都在调用不同的URL。 返回的状态码是手工编码的,也是你定义的一部分。
 
-相反,REST API将问题域中的各种实体建模为资源,并使用HTTP谓词来表示针对这些资源的事务 -  POST创建,PUT更新和GET读取。 在同一URL上用不同的HTTP请求都提供不同的功能。 并用常见的HTTP返回码表达请求的状态
 

三 译文解读

很显然,这篇文章很多缺点,例如明明叫做REST vs RPC - What is RESTful?,但是对于RPC又没有说什么,只是深度说明了RESTful是什么,甚至REST也是一笔带过,没有最后的那个例子理解RESTful 也是有点蛋疼。相反里面用SOAP(Simple Object Access Protocol)来做对比区分REST,而没点SOAP基础的人可能真的GG。
 

1.先说下REST和RESTful的区分

两者并不是指同一个东西
REST(Representational State Transfer),中文名表现层状态转化,他是一种设计原则
RESTful则是实现了这种原则的东西,有点经验都知道是RESTful Service RESTful API。简单理解一下,peace,peaceful,success,successful,名词,形容词,要是还不懂我也没办法了。
 

2.REST是什么?

重点 可以建模为客户端可以使用或采取行动的资源,不是客户端和服务器之间通信的实现细节
 
资源-----返回一个资源对象
正确返回{"login":true}错误返回{true}核心:资源对象要被描述

使用或采取行动----同一个url的get,put,del,post请求返回的对象一致

不是客户端和服务器之间通信的实现细节---不需要RPC那样返回操作结果

3.RESTful是什么?RESTful API是什么?

RESTful则是实现了这种原则的东西,总结点就是REST是原则,RESTful是实现。

RESTful API的具体实现则是

资源---url本身就是名词,而不含有动词

错误
/getLoginInfo 正确
/loginInfo

使用或采取行动----略

不是客户端和服务器之间通信的实现细节---使用http的状态码来描述请求状态而不是自定义code

例如这种常见的返回对象是不符合RESTful API的
{
  code:001
  message:密码错误
  data:{
  }
}

4.红字的理解

整篇文章我就红字看的有点懵逼,为什么这就带来好处了?但是联系下前后文,想到了RPC和SOAP突然就懂了,,,

RPC不说,文中的例子说的很清楚,说下SOAP

现在可能没啥人了解过SOAP这时代之泪,简单的说就是HTTP+XML,通过特定标签获取数据,那么只要数据结构有改变,前端的改动就会很大,甚至无法正常显示,耦合巨高。

当然可能就我有这红字理解问题,,,

RPC说下,Remote Procedure Call,远程过程调用,想想你连远程MySQL吧。

那么可以得出结论

RPC包含REST

技术需要互相交流学习,希望有人指出本人的出错的地方

[译文和个人分析]REST vs RPC - RESTful究竟是什么?的更多相关文章

  1. rmi rpc restful soa 区别

    rmi rpc restful soa 区别 rmi vs rpc 参考文档:http://stackoverflow.com/questions/2728495/what-is-the-differ ...

  2. spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析

    spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析 TransportContext 首先官方文档对Transpor ...

  3. JVM源码分析之一个Java进程究竟能创建多少线程

    JVM源码分析之一个Java进程究竟能创建多少线程 原创: 寒泉子 你假笨 2016-12-06 概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于L ...

  4. OpenStack源码分析 Neutron源码分析(一)-----------Restful API篇

    原文:https://blog.csdn.net/happyanger6/article/details/54586463 首先,先分析WSGI应用的实现. 由前面的文章http://blog.csd ...

  5. Hadoop2源码分析-YARN RPC 示例介绍

    1.概述 之前在<Hadoop2源码分析-RPC探索实战>一文当中介绍了Hadoop的RPC机制,今天给大家分享关于YARN的RPC的机制.下面是今天的分享目录: YARN的RPC介绍 Y ...

  6. 源码级强力分析hadoop的RPC机制

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://weixiaolu.iteye.com/blog/1477774 )2. Java ...

  7. spark 源码分析之六--Spark RPC剖析之Dispatcher和Inbox、Outbox剖析

    在上篇 spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRPCEnv 中,涉及到了Diapatcher 内容,未做过多的剖析.本篇来剖析一下它的工作原理. Dispatc ...

  8. golang标准库分析之net/rpc

    net/rpc是golang提供的一个实现rpc的标准库.

  9. spark 源码分析之七--Spark RPC剖析之RpcEndPoint和RpcEndPointRef剖析

    RpcEndpoint 文档对RpcEndpoint的解释:An end point for the RPC that defines what functions to trigger given ...

随机推荐

  1. QPushButton 点击信号分析

    QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled 表面上看,pressed和clicked都会在点击按钮时触发, ...

  2. 【Selenium专题】WebDriver启动Chrome浏览器(二)

    官方API Constructor Summary ChromeDriver() Creates a new ChromeDriver using the default server configu ...

  3. pos机代理行业

        传统模式(代理):代理商线性分润,代理商或营运商给一代大量的机器及要求,而且这个要求公对公结算(必须要有公司),分润也是直接给一代.然后一代找二代推广,层层发展.这样你会很担心你的上家的上家突 ...

  4. react-route简明学习

  5. [Maven实战-许晓斌]-[第二章]-2.6 NetBeans上面安装Maven插件

    NetBeans上面安装Maven插件

  6. file.delete()的优化

    //删除暂存的pdf File file =new File(pdfFilename); file.delete(); Path path2 = Paths.get(pdfFilename); Fil ...

  7. php面向对象编程_2

    1, 抽象类 ,用abstract关键字来修饰一个类,这个类就是抽象类:如果用abstract关键字来修饰一个方法,这个方法就是抽象方法,如果是抽象方法就不能实现(即抽象方法只能声明,不能定义). 抽 ...

  8. [ActionScript 3.0] 实现放大镜效果的简单方法

    //mc和bgmc是同一对象的不同实例 //mc放大的对象 //bgmc源对象 //mag放大镜 var scale:Number = 1.3;//放大倍数 mc.mask = mag; mag.st ...

  9. 「案例」让房东在 Airbnb 上展示他们的热情好客

    如何才能让房东准确的描述自己的房源,如何才能让房东充分的展示自己的房源.Airbnb 在这次更新里尝试去解决了这两个问题,让我们跟随作者的文笔去了解一下整个项目的经过. 关于本文 原文作者:Cecil ...

  10. [转] iOS中@class #import #include 简介

    [转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析        很多刚开始学习iOS开发的同学可能在看别人的代码 ...