在程序猿DD Spring Boot基础教程的开山篇《基础项目构建,引入Web模块,完成一个简单的RESTful API》中,RESTful 是什么呢?
那么先百度一下:一种软件构架风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更加简洁,更有层次,更用以实现缓存等机制。
是不是一头雾水,百度百科中对REST以及RESTful有非常理论的介绍,不过虽然耐着性子看完了,仍然不知所云。好在知乎有《怎样用通俗的语言解释REST,以及RESTful?》。
那么本文将对答者的回答自行梳理一下:
要了解REST,首先需要了解API(Application Programming Interface,应用程序编程接口)。什么是API呢?首先它的定义是一个接口,举个形象的例子来说,就是一个公司比如腾讯,他们对自己项目封装,提供一个API,然后我们或者一些小公司可以通过这些API,对封装的这个项目进行交互。通过这个渠道打到我们的目的。
了解了API,那么REST是什么呢?他是一种构架风格,腾讯这类公司要遵循这种风格建立API。那么REST的具体风格是什么呢?REST(Representational State Transfer)(表现层状态转移)。又是一头雾水,什么是表现层状态转移呢?
这里我们要了解一下Web,因为REST是基于Web应用的。Web:分布式信息系统为超文本文件和其他对象(资源)提供访问入口。资源是Web构架的关键点,当资源与Web交互时,它需要3个操作,识别(identify),表示(represent),交互(interact with),通过这三个操作,又引入了3个概念uri(统一资源标识符包括url和urn)识别资源;representation(例如html,xml,视频,图片)表示资源;通过协议(包括http,ftp等)与资源进行交互。
如果我们想将一个资源文件显现出来,就要通过uri进行暴露。uri的设计只是负责把资源通过合理的方式暴露出来。对资源没有任何操作,操作是通过http动词来实现的,所以REST通过URI暴露资源时,会强调不要再URI中出现动词。
比如:左边的是错误的设计,右边的是正确的
GET /rest/api/getDogs ——> GET /rest/api/dogs 获取所有的小狗
GET /rest/api/addDogs ——> POST /rest/api/dogs 添加一个小狗
GET /rest/api/editDogs/:dog_id ——> PUT /rest/api/dogs/:dog_id 修改一个小狗
GET /rest/api/deleteDogs/:dog_id ——> DELETE /rest/api/dogs/:dog_id 删除一个小狗
左边的这种设计,不符合REST风格,uri只负责准确无误的暴露资源,而getDogs、addDogs已经包含了对资源的操作,这是不对的。而右边是通过具体的Http动词来体现。所以很容易理解REST很好利用了HTTP本来的特性,而不是只是将HTTP作为传输层这么简单。
总结一下:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
网友评论