REST架构的一些主要特征

36 views
Skip to first unread message

李锟

unread,
Sep 27, 2010, 11:26:58 AM9/27/10
to rest_in...@googlegroups.com
很多人一提到REST,就以为更漂亮的URI设计就是REST。其实REST有非常丰富的内涵,更漂亮的URI仅仅是一个很小的外在特征而已。

REST架构的一些主要特征:
1. 无状态
注意,这里所谓的无状态,特指的是会话状态(session
state),而不是指所有的状态。所有的会话状态都必须由客户端来保存和维护,服务器不保存任何会话状态。服务器端主要负责保存和维护资源的状态(对所有的客户端都是一样的)。

2.面向资源的架构(ROA)
将服务器看作是一组离散资源的集合。资源是名词性的,而且资源是抽象的,可以代表任何可命名的概念。每一个资源至少有一个URI(可以有多个URI指向同一个资源)。有效地识别和定义出有哪些资源,是设计一个好的REST架构的关键。

3. 统一接口
通过统一的接口来对资源执行各种操作。这个统一接口就是HTTP协议。操作的语义必须在HTTP
body之前完全表达。不能像SOAP那样在HTTP body中表达操作的语义。

4.松耦合
对资源的操作,是通过传递资源的表述来完成的。同一个资源可以有很多种表述格式。资源的表述并不是资源本身,只是对资源当前状态的一种描述。与之相对应,RPC调用协议(SOAP、Hessian、DWR、PHP-RPC)中的那种对象序列化/反序列化的做法,耦合度太紧了。

5. 超文本驱动
带有超链接的超文本,用来暴露出服务器所提供的资源,指导客户端应用从某个资源的一个状态转移到另一个资源的一个状态。

超文本驱动是REST最容易被忽视的一个特征。很多RESTful的API,客户端对于URI的某种特殊构造方式做了过多的假设,因而造成了与服务器端的紧耦合。一旦服务器端URI的构造方式改变了,客户端就必须做很大的修改,否则就无法正常运行。其实Fielding在设计REST的时候,希望客户端与服务器端尽量松耦合,彼此能够相对独立地演化,不至于对对方造成巨大的影响。这并不是一个乌托邦的梦想。如果API的设计真的能够做到超文本驱动,就完全可以达到这个目的。

看了这些特征,你会很自然地想到,浏览器其实正是最符合REST特征的一种通用客户端应用。其实不光是浏览器,只要你开发基于HTTP的应用,模仿浏览器的做法都是值得鼓励的做法。

lin dongcheng

unread,
Sep 27, 2010, 9:57:40 PM9/27/10
to rest_in...@googlegroups.com
 琨哥好强,受用匪浅呀!


--
您收到此邮件是因为您订阅了 Google 网上论坛的“REST实战”论坛。
要向此网上论坛发帖,请发送电子邮件至 rest_in...@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 rest_in_actio...@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/rest_in_action?hl=zh-CN 访问此网上论坛。


1E3.gif

Tony Deng

unread,
Sep 27, 2010, 10:15:36 PM9/27/10
to rest_in...@googlegroups.com
超文本驱动是REST最容易被忽视的一个特征。很多RESTful的API,客户端对于URI的某种特殊构造方式做了过多的假设,因而造成了与服务器端的紧耦合。一旦服务器端URI的构造方式改变了,客户端就必须做很大的修改,否则就无法正常运行。其实Fielding在设计REST的时候,希望客户端与服务器端尽量松耦合,彼此能够相对独立地演化,不至于对对方造成巨大的影响。这并不是一个乌托邦的梦想。如果API的设计真的能够做到超文本驱动,就完全可以达到这个目的。

的确,这个特征是现在的大部分的REST框架都没有提供,而且基本上所有的RESTful的API也都没有提供这样的特征。我估计大家应该不是忽视这个特征,而是对这个特征的实现有些困扰吧。

--
Tony Deng
E-mail: wolf...@gmail.com
FriendFeed: http://freindfeed.com/tonydeng
Twitter: http://twitter.com/wolfdeng
Blog: http://wolfchina.blogbus.com/

crazycode

unread,
Sep 30, 2010, 12:52:25 AM9/30/10
to rest_in...@googlegroups.com
锟哥强的,直指核心

crazycode
@shanghai
http://twitter.com/crazycode


在 2010年9月27日 下午11:26,李锟 <dlee.cn@gmail.com>写道:
B97.gif

lin dongcheng

unread,
Sep 30, 2010, 12:55:55 AM9/30/10
to rest_in...@googlegroups.com

一直都是琨哥在分享,我们要抽空多学习多分享呀

在 2010-9-30 下午12:52,"crazycode" <craz...@gmail.com>编写:



锟哥强的,直指核心

crazycode
@shanghai
http://twitter.com/crazycode


在 2010年9月27日 下午11:26,李锟 <dlee.cn@gmail.com>写道:

很多人一提到REST,就以为更漂亮的URI设计就是REST。其实REST有非常丰富的内涵,更漂亮的URI仅仅是一个很小的外在特征而已。


>
> REST架构的一些主要特征:
> 1. 无状态
> 注意,这里所谓的无状态,特指的是会话状态(session

> state),而不是指所有的状态。所有的会话状态都必须由客户端来保存和维护,...


--
您收到此邮件是因为您订阅了 Google 网上论坛的“REST实战”论坛。
要向此网上论坛发帖,请发送电子邮件至 rest_in...@googlegroups.com

要取消订阅...

B97.gif
Reply all
Reply to author
Forward
0 new messages