初识Restful架构
起源
REST这个词,是Roy Thomas Fielding在他2000年的博士论文《Architectural Styles and
the Design of Network-based Software Architectures》中提出的。
《CHAPTER 5 Representational State Transfer (REST)》是REST的章节。
名称讲解
REST(REpresentational State Transfer):State Transfer 为”状态转移”,Representational 中文有人翻译为”表征”、”具象”,合起来就是 “表现状态转化。不过,一般文章或技术文件都比较不会使用翻译后的中文来撰写,而是直接引用 REST 或 RESTful 来代表。
从论文标题来看,REST是一种以网络 (Network-based) 为基础的架构样式 (Architectural Styles) 与软件架构 (Software Architectures)。
REST谈论的是一件非常重要的事:如何正确地使用 Web标准。所以想要了解 REST 最好的方式就是思索与了解 Web 及其工作方式。
REST本身是设计风格、设计理念而不是标准。如果你设计的应用程序能符合 REST 原则,这些符合 REST 原则的 REST 服务可称为 “RESTful web service” 也称 “RESTful Web API”。
资源
REST的名称”表现状态转化”中,省略了主语。”表现”其实指的是资源的表现。
资源就是网络上的一个数据实体,或者说是一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务。你可以用一个URI(统一资源标识符,Uniform Resource Identifier)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
所谓”上网”,就是与互联网上一系列的”资源”互动,调用它的URI。
回想,你如何连上我的博客,你可能通过浏览器直接输入 http://blog.csdn.net/u013007900 此域名来到达首页,也能用书签或网络上的链接,经点击后来连上我的博客。然后,你想看这一篇名为《初识Restful架构》的文章,所以以你接下去点击这文章的标题连结,接去下阅读。我们简易了解一下整个流程:
- 通过URL http://blog.csdn.net/u013007900 ,Client向该域名发出请求
- http://blog.csdn.net/u013007900 收到请求,发送首页HTML文件(以及CSS、JS等)给Client
- Client又点击REST文章连结向http://blog.csdn.net/u013007900发出archive/article/details/79860194的请求,进行跳转
- http://blog.csdn.net/u013007900 收到请求,响应REST文章内容给Client
对于客户端而言, Client的通过URI来获取资源的具体表现(Representational)。Client取得这些具体象征使这些应用程序转变其状态(以浏览器而言,取得HTML、CSS、JavaScript…来生成界面),随着不断取得资源的具体表现,Client端不断地改变其状态,这样不断的反复(iterations)过程就是所谓的Representational State Transfer。
对于服务器而言,由于互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。客户端的状态其实是由服务器的状态决定的。
如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer),这种转化是建立在资源的变化上的,所以就是”表现状态转化”。通常而言,客户端用到的手段是HTTP协议(如果有不了解的地方可以查看这篇说明)。如:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
综合上面的解释,我们总结一下什么是RESTful架构:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
为什么要用RESTful结构
我们先讲解一下什么是API(Application Programming Interface,应用编程程序接口)。在实际中大概就是,比如一些大公司,腾讯啊,阿里啊,豆瓣啊,他们可以提供游戏诶API,然后其他人可以编一个程序和这些接口API进行交互。比如,豆瓣的爬虫API啊,比如网易云使用微博的API,使得用户能分享到微博。这就是这些软件和微博的API进行了交互。
之前提到了,Restful就是设计这些API的风格,比如,腾讯设计这些API的时候,需要遵守一定的规则。
这样做的好处是什么呢?
大家都知道”古代”网页是前端后端融在一起的,比如之前的PHP,JSP等。
在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,使用RESTful架构可以通过一套统一的接口为 Web,iOS和Android等多种平台提供服务。
对于广大平台来说Restful架构能够更加广泛地被应用,让他们的工作量减少,同时也让用户更方便。在RESTful架构下: