[译文和个人分析]REST vs RPC - RESTful究竟是什么?

好烦啊,分不清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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券