RESTful是什么
REST是一套对资源操作的规范,资源通常指的是可通过http协议操作的存储在服务器上的文字、文件、图片和服务器可提供的服务等资源。采用这套规范构建的以网络为基础的应用软件的架构叫做RESTful架构。
详细介绍可以参考:
The RESTful CookBook
Richardson Maturity Model
为什么要用RESTful
目的是在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。
Roy Thomas Fielding在他2000年的博士论文中提出:
本文研究计算机科学两大前沿—-软件和网络—-的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。
如何构建RESTful架构
主要体现在三个方面:
Resources
通过唯一的URI标识资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。服务器可提供的操作服务本身也是一种资源。
如:http://localhost:port/goods/1
1.该URL表示编号为1的商品。
2.这是服务器提供的可操作服务资源。
HTTP Verbs
主要是通过HTTP不同的方法来表示对资源不同的操作。如:GET(查)、POST(增或改)、PUT(改)和DELETE(删)来
GET http://localhost:port/goods/1
表示获取id=1的商品信息
PUT/POST http://localhost:port/goods/1
表示更新商品的信息
DELETE http://localhost:port/goods/1
表示删除id=1的商品
POST http://localhost:port/goods
表示创建商品
GET的返回结果,只有资源信息:
GET /goods/1 HTTP/1.1
[various other headers]
{
"id": "1",
"name": "csdn"
}
Hypermedia Controls
它指的是 HATEOAS (Hypertext As The Engine Of Application State)。假设我们一开始服务只能发布一个众所周知的URI(返回一个包含调用者可访问的云资源表示[representation]的云表示,它也可以是一个URI链接)。通过检查这些表示就可以发现整个系统中的其他每个URI(包括所有完成状态改变的URI)。通俗的讲就像访问网站一样,通过一个页面可以访问到其他相关页面。
GET返回的结果,将附带可供操作的链接:
GET /goods/1 HTTP/1.1
[various other headers]
{
"id": "1",
"name": "csdn",
"links": {
"delete": "xxxxx",
"update": "xxxxx"
}
}