REST 的设计**试图通过统一对资源的标识、请求方式、操作方式来规范 Web 信息传递和表达的方式。
REST 到 ROA (Resources Oriented Architecture)
在面向资源的 Web 设计中,资源是设计的主体。因此,ROA 从资源的标识、关联、获取方式等角度对设计提出了不同的要求。
-
采用 URL 标识资源
一个可获取、可表现、可操作的资源必须具有一个或者多个标识。 资源的标识应具有良好的 可读性 。
URL 应用广泛,具有良好的语意表达结构,是标识资源的最佳工具。
例如:
http://www.tw.com/employess/528491 http://www.amazon.com/orders/2015/07/14/27149
同时,URL 也是 HTTP 请求的重要信息之一。
-
使用“链接”关联相关的资源,为资源在表现层的状态转换提供支持
资源在表现层的状态转变可分为两类,一是相同资源的不同表现形式的转变,二是不同资源表现的转变。URL 为第一类转变提供支持,而 超链接 则为第二类提供支持。
从另一个角度将“超链接”为 URL 提供了应用基础,而 URL 又是“超链接”的实现基础。
例如,要采用xml展现一部电影的信息,我们可以定义为:
<movie> <name>Inception</name> <genre>剧情|悬疑|科幻</genre> <directors> <add ref="http://www.imdb.com/directors/christopher-nolan">克里斯托弗·诺兰</add> </directors> <starring> <add ref = "http://www.imdb.com/actors/leonardo-dicaprio">莱昂纳多·迪卡普里奥</add> <add ref = "http://www.imdb.com/actors/marion-cotillard ">玛丽昂·歌迪亚</add> </starring> <language>英语</language> <poster ref = "http://www.imdb.com/posters/inception"/> <story>...</story> </movie>
超链接是资源间各种关联的重要良好表现形式。因此,一个RESTful的Web应用设计应尽可能在表现层采用这种形式描述各类资源的关联。
-
使用统一的 CRUD 接口
在设计业务逻辑行为时,根据不同的关注对象,可以分为面向行为的设计和面向资源的设计。其中,面向行为的设计更加关注操作行为,而REST的**更加提倡采用面向资源的设计。当设计面向资源时,对其的操作便可简单归纳为 CRUD,以保证对不同资源操作的一致性。
例如,在控制器中,將对不同资源的操作划分为不同的控制器,采用不同的 URL 路由来处理请求。
从另一个角度来看,这样的设计也可以与 HTTP 请求类型相契合。
-
使用标准的 HTTP 方法
常用的 HTTP 请求类型有:POST、GET、UPDATE、DELETE 与资源操作的CRUD相互对应。
同时,REST 还提倡在合适的语意环境利用其他的 HTTP 请求类型,如:PUT、HEAD、PATCH、OPTIONS 等来描述对资源的不同操作。
-
保证请求的安全性
对不安全的资源操作,应尽可能保证其 幂等性,即保证任意多次执行该操作所产生的影响与单次执行的影响相同。
-
合理的表示资源的不同表示方式
应根据请求携带的信息来识别资源表示。
例如,利用 HTTP 请求的 Content-Type 报头携带的媒体类型返回相应形式的资源表现。
-
尽可能采用无状态的请求
状态 指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息
HTTP 协议本身是无状态的,因此在连续的操作中保留状态是一种“费力”的“危险”行为。当连接暂时终端或采用分布式服务器处理请求时,状态很难被保留。因此,REST 提倡采用无状态请求,因为其更强的鲁棒性、可见性和可伸缩性。
REST 的设计**旨在通过统一对资源的标识、请求方式、操作方式来规范 Web 信息传递和表达的方式,简化 Web 应用结构的设计过程,增强代码的可读性,提高 Web 应用的适应性和稳定性,促进 Web 应用开发的工程化。