阅读更多

1顶
9踩

企业架构

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

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

本文我们将讨论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 的好处在于它动态, 数据处理简单, 而不是上文说的那些不着边的什么表征

发表评论

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

相关推荐

  • 谈linux磁盘结构及分区

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

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

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

  • 开源项目推荐:DiskGraph —— 监控Linux磁盘I/O的终端神器

    开源项目推荐:DiskGraph —— 监控Linux磁盘I/O的终端神器 diskgraph Graphs the disk IO in a linux terminal. 项目地址: https://gitcode.com/g...

  • linux磁盘管理工具(图形化管理工具)

    ubuntu cleaner——ubuntu应用程序及其配置文件清理。jdiskreport——目录和文件级别的使用量统计。gparted——磁盘分区信息。

  • linux磁盘可视化分析工具

    Baobab 是 GNOME 桌面环境中的一款图形化磁盘使用分析工具。它能够扫描文件系统并显示各个文件和目录的磁盘使用情况,以易于理解的树形图或圆环图展示。这种可视化方式使得用户能够快速找到占用空间较大的文件和目录。Baobab 是一款非常实用的磁盘使用可视化工具,特别适合用来分析和管理 Linux 系统中的磁盘空间。通过它的直观界面和强大的功能,用户可以轻松找到占用磁盘空间最多的文件和目录,从而采取相应的措施进行清理或优化。

  • Linux下如何使用分区工具fdisk和gdisk进行磁盘操作

    在Linux环境下,硬盘分区是一项重要的任务。它可以帮助我们更好地管理磁盘空间,优化系统性能。本文将详细介绍如何在Linux环境下使用和工具进行硬盘分区的操作步骤,包括分区前的准备工作、分区的具体步骤以及分区后的管理等内容。

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

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

  • 在UNIX \ Linux终端中的可视化磁盘空间和磁盘使用情况小工具 - Vizex

    在UNIX\ Linux终端中的可视化磁盘空间和磁盘使用情况小工具 - Vizex背景-什么是VizexLinux终端上安装方法如何使用Vizex1. vezix2. vizexdf3. 可以通过 --help 使用command调用option获得全部功能。 背景-什么是Vizex Vizex是UNIX / Linux系统的终端程序,它可以帮助用户查看用户计算机上每个分区和介质的磁盘空间使用情况。并能以彩色区分度高的图形方式显示计算机上所有分区和介质的空闲和可用磁盘空间。 其包含vizexdf这一功能,允

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

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

  • linux下利用图形化工具合并分区

    linux下利用图形化工具合并分区

  • Windows/Linux下磁盘使用的图形化工具简介

    Windows/Linux下磁盘使用的图形化工具简介   如何以图形界面查看磁盘及分区的大小及剩余容量呢?今天我为大家介绍两款Windows/Linux下磁盘使用的图形化工具分别是Spacesniffer/Baobab 帮你解决问题。 1.Baobab这个软件能够以图形化的形式表现磁盘所占用的空间,是GNOME环境下集成的图形化分析工具软件,对于磁盘的管理来说相当具有帮助。下载:http:/...

  • Ubuntu下的图形化分区管理工具——Gparted

    Linux下也有类似PQ Magic一样的图形化分区管理工具,他的名字叫Gparted。 在Ubuntu下: sudo apt-get install gparted 菜单上的位置是: 系统->系统管理->Gnome分区管理器 --------------------------

  • Partition Magic分区破坏了grub无法启动Ubuntu的解决方法

    我很早装的是XP和Ubuntu,然后无聊装了个Fedora,后来整来整去,用Partition Magic把Fedora那个分区去掉了,还给了XP,结果,grub就被破坏了进不去了。这里给出一种解决方法。 方法其实是很多的。我自己用的是Ubuntu CD解决的,也就是用Ubuntu自己的安装光盘。 Ubuntu目前的版本(8.04以上吧)应该都在安装的时候可以让你选择一个选项,就是

  • magicbook的linux是哪个版本,MagicBook 2019 linux版来了!

    2018年,当主流高性能轻薄本的售价还坚守在5000元以上的时候,荣耀MagicBook锐龙版的出现首次将高性能4核轻薄本的价格拉到了4000元之下。这其中最大的功臣就是锐龙5 2500U处理器。2019年11月5日,锐龙将再一次改变了世界--搭载锐龙7 3700U处理器的荣耀MagicBook 2019科技尝鲜版正式发布!所谓科技尝鲜版指的是预装了第三方Linux而非windows的操作系统,适...

  • Linux SWAP 交换分区配置说明

    一.SWAP 说明1.1 SWAP 概述当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。这个是SWAP 交换分区的作用。 实际上,我...

Global site tag (gtag.js) - Google Analytics