restful架构实践指南:概述(一)

发送到手机
使用"扫一扫"即可发送至手机

RESTful概述

背景

Restful是最近流行的一种互联网软件架构风格,REST这个名称第一次出现于Roy Fielding在2000年所著的博士论文” Architectural Styles and the Design of Network-based Software Architectures”中。它从诞生开始就因为其简单性和可扩展性收到广大前端开发架构师的喜爱,另一方面由于云平台和移动互联网的兴起,restfull也被广泛应用。

REST指的是一组架构约束条件和原则,它既没有框架也没有API,网上也很少有比较系统地介绍REST的规范和实践。客观来说,对于很多前端开发者来,REST的概念还是很抽象,相比起来我们理解RPC的方式要简单许多,下面就请跟随稻壳前端开发程序员来学习下REST的基本概念。

名词解释

REST即Representational State Transfer的缩写,直接翻译过来就是"表现状态转化”(这是什么鬼,说人话好吗?)。我第一次见到也是一脸懵逼,这个大概就是REST的特色了,会有很多概念需要大家去理解。通俗来讲REST是以资源为中心的架构风格,指资源在网络中以某种表现形式进行状态转移,我们可以称之为ROA(面向资源架构),对应于SOA(面向服务架构)。接下来我们从围绕着资源,对REST的基本概念展开解释。

资源与URL

资源是什么?资源是一个名词,它既可以是实体的也可以是抽象的,一个文档、要给视频、一段音乐、一张优惠券,一次请假,双11买的某个商品都是资源。如果要在网上使用它,需要能在网络上标识它,Web提供一个统一资源标识符(Uniform Rescouce Identifier),称为URI或者URL。一个URL唯一标识一个资源,同时使资源在web上是可以3寻址的,也能够使用Http协议来操作它。

URL和资源之间的关系是多对一的,一个URL仅仅标识一个资源,但是一个资源可以有多个URL。比如稻壳官网的首页可以通过http://www.dookay.com访问和http://dookay.com 两个URL来访问。

blob.png

图1.1一个资源对应多个URL

下面我们来看看一个规范的Restfull URL应该怎么设计。

http(s)://www.dookay.com/api/{version}/{domain}/{rest-convention}

这里,{version}代表api的版本信息。{domain}是一个你可以自己定义的业务领域(列如News指新闻相关接口),{rest-convention} 代表这个域(domain)下,约定的rest接口集合。值得注意的是convention代表具体的资源名称,必须是名词。

资源与表现

资源必须至少有一个标识符,以便可以在网上找到,每个标识符与一个或者多个表现相关联。网站建设时一个表现是指某个资源在某个特定时刻的状态的转化形式或者视图。这个视图被编码为一种或多种可转移的格式,例如html、xml、json,甚至是MP3或者JPEG。

对于一个资源,它是通过表现被访问,通过资源和表现的分离,可以促进客户端和服务端的松耦合。尽管资源表现和资源这两个概念经常是可以通用的,但是理解清楚两者的差异也很重要。

blob.png

图1.2:一个资源和表现关系的例子

资源与状态转移

状态是指什么?从字面意义上理解,状态是指“表现状态”,好吧,还是没懂。其实“Representational State Transfer”本身是一个不完整的表达,根据实践经验来看,应该是“Application States Transfer among the resource ’ s representation”。这里的state指的是应用的状态,即客户端的状态,这个状态是用“资源的表现”来体现的,所以应用状态的转变也就是“可呈现的状态”(Representational State)的转变。

前面讲过资源以及资源的表现都是通过url来呈现的,那么对资源的操作也在http下通过对url的访问来实现的。http对url的不同操作是通过谓动词实现的,包括常用的GET、POST、PUT、DELETE和不常用的POTIONS、HEAD、TRACE、CONNECT以及PATCH。增对单一资源的操作其实也就是CRUD而已,通过资源操作和http方法的统一,那么我们就可以统一的restfull api访问接口:

blob.png

图1.3:统一的接口

上面的代码片段提供了4个方法匹配http常用的四个方法,都是建设网站是常用的方法,通过HTTP 协议定义 GET、POST、PUT、DELETE 来表示对资源的获取、创建、更新和删除。

总结

本文解读了从REST名称引申出来的几个基本概念资源、URL、资源表现、状态转移,但还没有进一步说明REST提供的更多的核心概念和指导思想,也还不清楚REST架构的真正价值所在,那么在稻壳互联接下来的文章中,我们来一步步体会。


参考文献:

1.REST实战

2.RESTFull Web Services Cookbook


restful架构实践指南:概述(一)

restful架构实践指南:概述(一)

分享:

标签: