阅读更多

1顶
9踩

企业架构

原创新闻 为啥REST如此重要?

2013-08-01 18:31 by 副主编 mengyidan1988 评论(14) 有12433人浏览

本文我们将讨论REST,它定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的Web服务,这是一个非常容易让人误解的概念。本文主要是写给那些想设计WebService API但却对REST没有十分清晰认识的开发者们。在本文最后会附上一些资源供大家学习,这些资源讲解非常详细。

什么是REST

表征状态转移(Representional State Transfer),是Roy Fielding( HTTP规范的主要编写者之一)博士在2000年他的博士论文中提出来的一种软件架构风格。它并不是一个标准,而是通过表征(Representional )来描述传输状态的一种原则。其宗旨是从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态。

目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC相对比,更加简洁,越来越多的Web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

让我们来思考一下:

Marcus是一个农民,他有4头牛,12只鸡和3头奶牛。他现在模拟一个REST API,而我是客户端。如果我想用REST来请求当前的农场状态,我仅会问:“State?”Marcus会回答:“4头猪、12只鸡、3头奶牛”。

这是REST最简单的一个例子。Marcus使用表征来传输农场状态。表征的句子很简单:“4头猪、12只鸡、3头奶牛”。

再往下看,看我如何让Marcus用REST方式添加2头奶牛?

按照常理,可以会这样说:Marcus,请在农场你再添加2头奶牛。难道这就是REST方式吗?难道就是通过这样的表征来传输状态的吗?不是的!这是一个远程过程调用,过程是给农场添加2头奶牛。

Marcus很愤怒地响应到:“400,Bad Request”,你到底是什么意思?

所以,让我们重新来一次。我们怎样做到REST方式呢?该怎样重新表征呢?它应该是4头猪、12只鸡、3头奶牛。好,让我们再次重新表征……

我:“Marcus,……4头猪、12只鸡、5奶牛!”

Marcus:“好的”。

我:“Marcus,现在是什么状态?”

Marcus:“4头猪、12只鸡、5头奶牛”。

我:“好!”

看到了吗?就这样简单。

为什么RPC也不够好?

从逻辑角度来看,为什么会更加青睐REST而不是RPC(Remote Procedure Call,远程过程调用 ),因为它极大的降低了我们沟通的复杂度,通过把表征作为唯一的沟通的方式。无需去讨论过程(添加一头牛?增加一种动物类型?给鸡的数量翻倍还是卖掉所有猪?)我们只需讨论表征,并且使用这个表征来达到我们想要的目标,很简单,不是吗?我不希望和Marcus的沟通失败,因为我们彼此的理解过程会不一样,所以只需要知道最后的状态就行。但这仅仅是创建RPC会产生许多问题之一。如果你使用RPC,你需要设计一些程序嵌入到某种结构中。这种结构需要存储参数、错误的代码、返回值等。我已经看到许多公司这样做,他们设计自己的RPC-结构来实现客户端与服务器端的交互,但却产生许多问题。你为什么要这么做?为什么要创建自己的RPC-结构?这样做的好处是?倘若我想要让应用程序使用许多WebService,并且这些WebService带有多个RPC-格式属性?那么我不得不去开发一些类似这样的东西:

如果你们真的需要RPC,至少要选择一个类似SOAP的标准。

但SOAP也很糟糕

即使RPC的标准真的很令人痛苦,但我不得不承认ACID事务,一个完整的标准化服务描述性语言SOAP(Simple Object Access Protocol,简单对象访问协议)在某些环境下表现的还不错。尽管如此,SOAP产品的性能开销很大,它是一个巨大的性能杀手。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP、URL、XML、PNG等)。

Session更邪恶

你无需Session!但有人会说:“我想要保存用户购物车里的商品,所以我必须要Session!”不,这样想是错误的!即使没有Session,你也可以做你任何你想做的事情。你可以只需在URL里封装购物车信息,或者为购物车创建另一个资源,比如“/carts/5235”。

不需要与客户端进行会话,通过这些操作(指在URL里封装购物车信息,或者为购物车创建另一个资源,比如“/carts/5235”)后,客户端向服务器发出请求后,哪怕你在服务器上执行卸载平台和操作系统、拆除服务器硬件、重新组装服务器、重新安装操作系统、平台、应用程序备份恢复操作,也不会影响客户端。

不要强迫客户端保存状态,这样做不仅复杂,而且还会带来许多问题,你应该从你的Web应用程序里删除有状态的东西。

不要重造超媒体

目前,超媒体已经相当普及,我提醒大家,不要再去重新造轮子。这里已经有许多,足够你使用了:

其他资源

这里还有一些更加深入的资源供你参考使用:

via Why REST is so important

来自: csdn
1
9
评论 共 14 条 请登录后发表评论
14 楼 say4ever2u 2013-10-16 16:40
mysh 写道
rest 的好处在于它动态, 数据处理简单, 而不是上文说的那些不着边的什么表征

是源作者故弄玄虚呢 还是这里翻译有问题  看的晕晕的
13 楼 dohkoos 2013-09-18 21:56
简单才是REST流行的因素。因为使用了HTTP的方法才简单。当然,也可以把REST构建在其它协议之上,但实践中这样使用REST的案例有多少呢?
12 楼 闫老三 2013-08-08 12:28
我就出门打个酱油,不用理我。
11 楼 archerfrank 2013-08-07 14:49
rentianchou 写道
caizi12 写道
JavaCrazyer 写道
freezingsky 写道
娘的,这玩意这么深奥,我一直把REST当成URL更人性化。。。
哈哈,我一直来也是这么理解的

我也是这么理解。难道咱们理解的都太片面?


   我也是

我也是,再加上会用不同的方法 put delete
10 楼 rentianchou 2013-08-07 09:26
caizi12 写道
JavaCrazyer 写道
freezingsky 写道
娘的,这玩意这么深奥,我一直把REST当成URL更人性化。。。
哈哈,我一直来也是这么理解的

我也是这么理解。难道咱们理解的都太片面?


   我也是
9 楼 rox 2013-08-03 12:53
个人理解REST最最重要的就是面向资源!
8 楼 caizi12 2013-08-02 20:53
JavaCrazyer 写道
freezingsky 写道
娘的,这玩意这么深奥,我一直把REST当成URL更人性化。。。
哈哈,我一直来也是这么理解的

我也是这么理解。难道咱们理解的都太片面?
7 楼 JavaCrazyer 2013-08-02 14:28
freezingsky 写道
娘的,这玩意这么深奥,我一直把REST当成URL更人性化。。。
哈哈,我一直来也是这么理解的
6 楼 lianglaiyang 2013-08-02 09:26
真心没听明白什么意思,太深奥了,复杂的事情可不可以简单化呢?
5 楼 freezingsky 2013-08-01 22:19
娘的,这玩意这么深奥,我一直把REST当成URL更人性化。。。
4 楼 dwangel 2013-08-01 22:10
不对,最多应该只返回 5头奶牛
3 楼 dwangel 2013-08-01 22:08
其实应该是
url: /农场
4头猪、12只鸡、3头奶牛

url: /农场/奶牛
method add
param 2

然后返回 success
部分情况下返回 4头猪、12只鸡、5头奶牛
2 楼 dwangel 2013-08-01 22:04
mysh 写道
rest 的好处在于它动态, 数据处理简单, 而不是上文说的那些不着边的什么表征

同意。
其实还是松耦合的概念。
soap等rpc其实还是不够松。
1 楼 mysh 2013-08-01 19:24
rest 的好处在于它动态, 数据处理简单, 而不是上文说的那些不着边的什么表征

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • HA-PartitionMagic80-LDR1(磁盘分区魔术师)

    一款可以在WINDOWS下运行的中文软件,可以轻易的对磁盘进行格式化、分区、调整分区大小而不会影响数据的工具。

  • 谈linux磁盘结构及分区

    谈linux磁盘结构及分区 来源:chinaunix     日期:2006-6-20 11:32:00  点击次数:

  • linux 常用知识

    一、分区 分区原理: 1、主分区和扩展分区(逻辑分区) 2、一个硬盘最多只能分四个区 3、如果需要分5个以上分区,那么在扩展分区里面再分,理论上可以分无数个分区。   格式化原理:  1、分好区的硬盘,系统不能识别,只有格式化之后才能被操作系统识别,如果格式化为FAT32,那么就能被windows识别。  如果被格式化ext2格式,那么分区就能被linux系统认识。  2、通常硬

  • Disk Druid分区方法

    redhat9:Disk Druid分区方法:IDE接口的硬盘三个区:新建 /boot  ext3   新建 交换分区  swap  不挂载  内存1-2倍根目录 全部空间  ext3  / 。引导装载程序 grub 安装位置 默认硬盘的主引导扇区 如果主引导扇区上有其他的引导程序则 grub 要改变安装位置 点击  “改变引导装载程序” [右上角]grub 还可以用来引导其他的操作系统。“添加”

  • linux 魔术分区,Parted Magic-Linux 中的分区魔术师

    Parted Magic 是一张容量约为 30 MB 的 LiveCD,你不仅可以通过光盘来使用它,而且也能够在优盘中应用。此工具盘的主要用途是为硬盘完成分区工作。它预装的分区工具包括GParted 和 Parted,其中 GParted是一个图形化的分区工具,很容易使用,称之为分区魔术师最为合适。在 Parted Magic 中除了一些分区工具之外,还包括了partimage、testdisk、...

  • linux安装过程中的硬盘分区工具是,Linux硬盘分区管理工具

    Linux硬盘分区管理工具在安装Linux 操作系统时,如果选择了手工的分区方式,将启动硬盘分区工具Disk Druid。这个程序是安装程序自带的。下面讨论一下该软件的使用。Linux下硬盘分区的标识在Linux 下用hda、hdb 等来标识不同的硬盘;用hda1、hda2、hda5、hda6 来标识不同的分区。其中,字母a 代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一...

  • linux 硬盘分区确认,linux 下关于硬盘分区的文章(转)

    进行硬盘分区首先,会让你选择不同的分区工具:Disk Druid和fdisk,建议使用Disk Druid。在Disk Druid的主界面的最上面是'Current Disk Partitions'区,列出各个硬盘分区的信息。每行由五个项目组成:Mount Point -- 指定该分区对应的Linux系统目录;Device -- 硬盘分区的设备名;Requested -- 分区定义时申请的最小空间...

  • 用Partition Magic实现无损调整磁盘分区

    通常,如果想要在不损坏硬盘数据的情况下缩小某个分区的容量或者把分区由NTFS文件系统转换成FAT文件系统,我们首先想到的就是PowerQuest公司的Partition Magic(以下简称为PQ Magic)。的确,这个软件功能强大,使用简单,而且算是比较安全,可是有一个问题,就是其英文版软件对双字节(例如中文)文件和文件夹的支持非常差,例如很多人用英文版PQ Magic把包含中文目录和文件名的

  • RHCE课程-系统管理部分|6、fdisk分区及格式化

    今天我们来学习关于文件系统的操作,当然,最简单的就是分区了,而且这也是系统管理必须会的功课。 系统分区工具: disk druid:方便的分区工具,只能在安装时使用,是图形界面的 fdisk:运用广泛的自焚界面下的硬盘分区工具。 disk druid 是图形界面的,只要你有一点文件系统基础,就能够搞定,我们今天的的重点是fdisk工具。 先介绍下分区的类型,常用的有...

  • linux安装如何选择磁盘,如何为硬盘安装Linux操作系统准备硬盘空间?关键要学会两点...

    从硬盘(传输)安装Linux操作系统的方法步骤[@ more @]我曾经以CD的形式安装Linux。但是,CD损坏了,系统也坏了。一套CD要几十美元,心痛!有更好的解决方案吗?有!那就是将CD制作成iso映像,将其存储在硬盘上,然后通过硬盘安装它! !要从硬盘安装Linux操作系统,必须首先准备安装软件包。 Linux操作系统的安装程序包通常是一个或多个ISO映像文件(通常可通过网络下载获得)。其...

  • CentOS 7 安装教程、硬盘分区、LVM、网络配置、软件源配置、制作

    最佳分区设置取决于 Linux 系统的用途。下面的提示可对您决定如何分配您的磁盘空间有帮助。 二.安装CentOS 7(CD、USB、网络) 1.安装引导 首先要设置计算机的启动顺序为CD-ROM或USB 启动,保存设置后将CD放入光驱或插入USB,重新启动计算机。 计算机重启后显示有几个选项的引导菜单。如果在 60 秒内没有按任何键,则运行默认引导选项。要选择默认,您可以等待计数器超

  • linux分区无损调整工具

    一开始安装linux随便分的区,好尽快的体验linux,可是初学者对linux不了解,定制时很费力,索性就全部或大部分都安装了,据说Fedora 7 完全安装要16GB(1629个软件包),Fedora 6也有2243个软件包。装好了以后没多久就出现硬盘空间紧缺的问题,是不是也可以像在windows下的PQ Partion Magic一样调整分区呢,当然可以了,parted就可以实现,不过那个是命

  • C盤分割工具PartitionMagic805

    安裝在原系统中,在不动原系统的情况下分割c盘,很适合新卖的本子或品牌机c盘很大的情况。

  • Linux系统终极安装手册(图)

    Linux系统终极安装手册(图) Linux系统跟windows系统的安装不大一样,有不少需要注意的地方,笔者在实际中也碰到不少朋友在linux安装过程中出现问题!因此,笔者以Redhat  Linux 9.0为例,将自己以前安装linux的...

  • diskgenius linux 分区,DiskGenius怎么分区,DiskGenius分区教程

    DiskGenius分区教程方法一:一、首先,打开DiskGenius软件并单击以选择要操作的硬盘驱动器。二、然后右键单击“快速分区”按钮并单击“确定”。方法2:三、选择要操作的硬盘,单击软件上方的硬盘按钮,单击下面列中的快速分区按钮,然后单击确定。DiscGenius功能:四、支持创建分区、删除分区和隐藏分区等基本操作。然后软件会根据我们的需求来修改分区大小五、DiskGenius可以让我们在2...

  • diskgenius linux 分区,DiskGenius调整ext4分区容量大小的方法

    Ext4是一款扩展文件系统,它具有强大的功能。Ext4分区的大小取决于Windows系统的文件分区类型,在该系统下,可以借助DiskGenius硬盘分区软件对ext4分区的大小进行调整,它在不影响分区内现有数据的情况下,可以进行缩小、扩展、拆分等分区操作。接下来小编教大家使用DiskGenius分区软件调整ext4大小的方法,不知道怎么操作的朋友可以根据下面教程进行操作哦:方法步骤:大小:31.9...

Global site tag (gtag.js) - Google Analytics