https://cloud.tencent.com/developer/news/15977html
今天下班回家时,一个组员在QQ上面问我是否知道REST架构,我当时楞了几秒,回想了两年前第一次学习RESTful的场景。很是尴尬,不少东西我都忘记了。web
在短暂的回忆以后,我在手机上打出了这样一段文字“我目前还无法很好的解释,简单说它是一种面向资源的架构设计风格”。接下来一种我想到了,这样的主流框架在定义路由的时候都采用了这样的设计,甚至的、的都不例外。可是这到底是一种怎样的设计呢?我没法用语言描述清楚。后端
在我看来同样东西是否理解,不取决因而否会使用,而是可以向不理解的人讲述清楚。从这个观点上来看,我对RESTful算是一点也说不上理解了。服务器
在网上查了些资料,很是多的人为REST与RESTful提出了本身的理解,在中心思想不变的状况下,又各自演化出了各自对REST思想的解读。为何会这样呢?由于提出REST思想的是一篇学术论文中的某个章节,而学术论文自己就是晦涩难懂的,因此才会出现了五花八门的各自解释。restful
总结了一下网上各类各样的说法。发现对REST思想的理解能够分为几个层次。markdown
初级层架构
并非彻底说这一层很low,而是他能用一句话进行归纳性的总结。框架
总结一句话就是:用URL定位资源,用HTTP动词来描述操做,经过HTTP的响应码来感知结果。前后端分离
这是目前我认为的对REST架构设计的最精简的解读了。可是他并无说明咱们该如何去作。这个时候就须要咱们过分到中级层面来看待问题了工具
中级层
在这一层的理解我推荐看阮一峰的《理解RESTful架构》这一篇文章。我会综合其余几篇文章来谈谈本身的读后的理解。
首先对REST进行一个定义,从字面翻译来看是指“表现层状态转化”。这个字面意义初看我是没法理解的,只能进行拆解。
其中的R是指翻译成中文是指表示层。(可是我没有查到是否与OSI的7层模型中的表示层有什么区别,中文中这两个意思都同样,甚至在英文中二者意思也没有什么差别,同时在StackOverflow上面搜索发现和也是能够混用的)。在阮一峰看来,这里的表示层是指资源的表现层,在互联网上能够用一个URL(统一资源定位符)来指向它。
状态转化(State Transfer):从《图解HTTP》中咱们能得知HTTP协议是一种无状态的,排除Cookie,没法区分同一个URL请求的状态。若是想操做服务器,就必须经过某种方法,让服务器发生状态改变。这里指的其实就是HTTP的动词方法。,,,等都属因而常见的动词方法。
那么再有了上面的理论以后,咱们得出结论是:1.每个URL表明了一个资源,客户端和服务端经过HTTP中的动词方法来讲明本身的意图。
例如简述的用户首页请求这种就是一个RESTful风格的URL,若是须要发送一些具体的信息可使用这种形式在请求内容中附上具体信息就好。整个的path路径中不须要带上动词,由于HTTP的动词就已经可以很好的说明一切了。
最后服务端在作出响应的时候,只要配合上响应码code这时就可以确切的得知服务端的具体信息了。
初看好像这样的作法没什么,可是若是细细想一下就会发现,这样的架构设计不只能用于web,也能够用于其余端,或者是任意一个支持了HTTP协议的工具。
这样的架构设计很是巧妙的把先后端进行了数据层面上的分离。在web开发进行先后端分离的时代,作出了很大的理论与架构设计上的贡献。这是我目前对REST架构设计的理解。
高级层
到了这一层,大部分优秀的通过别人的理解以后加工出来的文章你可能都已经看过了,那么接下来你须要去啃论文了。
若是只从第5章和第6章讲REST架构的地方开始看的话,大概是70多页的内容。初步计算须要花费4-5天的业余时间。理性告诉我现阶段我不应在这上面耗费太多时间。因此若是还有第三次学习REST的话,我会直接去学习原版论文。
总结
经过此次学习,对REST又有了一些深刻的理解。虽然在我看来也只是再原来浅薄的基础上又深刻了一些。
写在结尾,熟悉了REST,你知道最近有一个新的概念叫GraphQL么,与REST相比他又能算得上是一种新的思想。
技术老是在不断的变化,三年开发给个人最深的感触就是,偏偏是那些在大学计算机系里面通过了几十年沉淀下来的那些不变的基础知识才是最有用技能。而这个行业的不少新人在追寻的只不过是屠龙之技罢了。
参考资料
怎样用通俗语言解释REST,以及RESTful https://www.zhihu.com/question/28557115
理解RESTful架构http://www.ruanyifeng.com/blog/2011/09/restful.html
REST架构相关论文http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf