好烦啊,分不清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. TSQL--HASH JOIN

    算法: 将其中一张表的连接列做hash,然后遍历另外一张表,对遍历出的每一行到hash表中匹配查找 要求:hash表不要求表排序或有索引

  2. 简单几步,提升.Net Core的开发效率

    附加IIS进程调式? 以前在开发ASP.NET(MVC)项目的时候,为了加快程序的启动速度(调式),我们会选择使用IIS.先用IIS架设还在开发的项目,在需要调式的时候附加进程,而在更多时候,如果调整 ...

  3. SQLite Mysql 模糊查找(like)

    select UserId,UserName,Name,Sex,Birthday,Height,Weight,Role from xqhit_Users where UserName like &qu ...

  4. C#中的线程

    1.线程Thread 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行:对于比较耗时的操作(例如io,数据库操作),或者等待响应(如WCF通信)的操作,可以单独开启后台线程来执行,这样主线程 ...

  5. Oracle.ManagedDataAccess.dll方式操作oracle数据库

    Oracle.ManagedDataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnectio ...

  6. win7下安装numpy

    OS: WIN7 32bit Python: 3.4 在以下网站下载: numpy-MKL-1.9.0.win32-py3.4.exe

  7. fzu月赛(2015.11)(思维)

    Problem 2205 据说题目很水 Sunday最近对图论特别感兴趣,什么欧拉回路什么哈密顿回路,又是环又是树.在看完一本书后,他对自己特别有信心,便找到大牛牛犇犇,希望他出一题来考考自己. 在遥 ...

  8. Notepad++给自己打造一款PowerQuery M语言编辑器【转】

    Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器 Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器-Power BI-ExcelHo ...

  9. centos6安装mysql5.7

    RPM包安装与卸载mysql 建议:装完mysql后立刻创建一个密码,不然下次登录的时候会有问题.原因是mysql 5.7会自动创建一个临时密码,过期失效,可以到grep "password ...

  10. [译文]casperjs 的API-casper模块

    Casper class: 可以通过这个模块的create()方法来获取这个模块的一个实例,这是最容易的: var casper = require('casper').create(); 我们也可以 ...