什么是RESTful?RESTfule风格
导读
理解什么是rest之前,先去脑补以下什么是http,参考【http协议】
什么是rest?
rest(英文:representational state transfer,简称rest,意思:表述性状态转换,描述了一个架构样式的网络系统,比如web应用)。
它是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,它主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存等机制。
它本身并没有什么使用性,其核心价值在于如何设计出符合rest风格的网络接口。
什么是restful?
rest:指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是restful。
restful的特性
资源(resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个uri(统一资源定位符)指向它,每种资源对应一个特性的uri。要获取这个资源,访问它的uri就可以,因此uri即为每一个资源的独一无二的识别符。
表现层(representation):把资源具体呈现出来的形式,叫做它的表现层(representation)。比如,文本可以用txt格式表现,也可以用html格式、xml格式、json格式表现,甚至可以采用二进制格式。
状态转换(state transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。http协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(state transfer)。而这种转换是建立在表现层之上的,所以就是“表现层状态转换”。具体说,就是http协议里面,四个表示操作方式的动词:get、post、put、delete。他们分别对应四种基本操作:get用来获取资源,post用来新建资源,put用来更新资源,delete用来删除资源。
如何设计restful应用程序的api?
路径设计:数据库设计完毕之后,基本上就可以确定有哪些资源要进行操作,相对应的路径也可以设计出来。
动词设计:也就是针对资源的具体操作类型,有http动词表示,常用的http动词如下:post、delete、put、get
restful示例
- /account/1 http get:得到id=1的account
- /account/1 http delete:删除id=1的account
- /account/1 http put:更新id=1的account
springmvc对restful的支持
restful的url路径变量
url-pattern:设置为/,方便拦截restful请求。
@pathvariable:可以解析出来url中的模板变量({id}/{name})
url:http://localhost:8080/ssm/cyb/item/1/chenyanbin controller层: @requestmapping("{id}/{name}") @responsebody public item queryitembyid(@pathvariable integer id,@pathvariable string name){ ............. }
如图
restful的crud
@requestmapping:通过设置method属性的crud,可以将同一个url映射到不同的handlermethod方法上。
@getmapping、@postmapping、@putmapping、@deletemapping注解同@requestmapping注解的method属性设置。
restful的资源表述
restful服务中一个重要的特性就是一种资源可以有多种表现形式,在springmvc中可以使用contentnegotiatingmanager这个内容协商管理器来实现这种方式。
内容协商的方式有三种
- 扩展名,比如.json表示我要json格式数据、.xml表示我要xml格式数据
- 请求参数:默认是“format”
- 请求头设置accept参数,比如设置accept为application/json表示要json格式数据
现在一般restful风格响应的数据一般都是json格式,所以一般也不使用内容协商管理器,直接使用@responsebody注解将数据按照json格式返回
静态资源访问<mvc:resources>
在springmvc.xml文件中,使用mvc:resources标签,具体如下:
<!-- 当dispatcherservlet配置为/来拦截请求的时候,需要配置静态资源的访问映射 --> <mvc:resources location="/js/" mapping="/js/**"/> <mvc:resources location="/css/" mapping="/css/**"/> .... .... .... ....
如图
springmvc会把mapping映射到resourcehttprequesthandler,这样静态资源在经过dispatcherservlet转发时就可以找到对应的handler了。
上一篇: 关于Vue生命周期的实例讲解
下一篇: 专题-集合-HashMap