1.1.2 什么是REST
REST(REpresentational State Transfer)的意思是表述性状态传递,它是Roy Thomas Fielding在2000年发表的博士论文中提出来的一种软件架构风格。作为一种Web服务的设计与开发方式,REST可以降低开发的复杂性,提高系统的可伸缩性。
REST是一种基于资源的架构风格,在REST中,资源(Resource)是最基本的概念。任何能够命名的对象都是一个资源,如document、user、order等,通常情况下,它表示Web服务中要操作的一个实体。一个资源具有一个统一的资源标识符(Uniform Resource Identifier,URI),如users/1234,通过资源标识符能够标识并访问该资源。
除了单个的资源外,资源集合表示多个相同类型的资源,如users。在系统设计时,不同的实体之间往往存在某种关联关系,如一个用户有多个订单。同样,在REST中,这种关联关系也能够由资源之间的层次关系体现出来,如users/1234/orders/1。
由于REST以资源为中心,因此REST接口的端点(Endpoint)均以资源或资源集合结尾,它不像其他形式的Web服务一样以动词结尾,如api/GetUserInfo或api/UpdateUserInfo。在REST中,对资源的动作或操作是通过HTTP方法来完成的,如下:
GET http://api.domain.com/users/1234 PUT http://api.domain.com/users/1234
上例中用到了两个HTTP方法,分别为GET与PUT,它们的作用分别是获取和更新指定资源。当请求方发起请求,修改了资源的状态后,更新后的资源表述应返回给请求方,这也是表述性状态传递的意义。
从上面的例子可以看出,REST与HTTP有一定的关系,资源在服务的提供方与请求方之间进行传递,需要借助于协议来约定,比如协议所规定的消息格式等,而HTTP协议则是非常成熟且被广泛使用的网络协议。事实上,HTTP协议完全满足REST中所定义的约束,因此REST能够充分地使用HTTP协议以及其中的功能(如HTTP方法、HTTP消息等),并设计出松耦合的Web服务。1.1.3节将介绍REST约束,在1.2节中将会介绍HTTP协议。