越来越多的web服务开始采用RESTful风格设计和实现
越来越多的web服务开始采用RESTful风格设计和实现
安安静静的帅着 发表于1年前
越来越多的web服务开始采用RESTful风格设计和实现
  • 发表于 1年前
  • 阅读 9
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

摘要: 什么是RESTful? RESTful的规范是什么? 实际开发中RESTful是怎么使用的?

> 文章概要:

什么是RESTful? RESTful的规范是什么? 实际开发中RESTful是怎么使用的? RESTful架构,是目前最流行的一种互联网软件架构,因为其结构清晰,符合标准,易于理解,扩展方便,所以越来越多的网站采用RESTful架构设计了。 其实,RESTful是一种开发理念,是对http很好的诠释。维基百科说:REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。维基百科称其为“具象状态传输”(英文:Representational State Transfer,简称REST),我理解为“表现层状态转化”,是Roy Thomas Fielding博士于2000年在他的博士论文 "Architectural Styles and the Design of Network-based Software Architectures" 中提出来的一种万维网软件架构风格。 我们先来具体看下RESTful风格的url,比如我要查询商品信息,那么

非REST的url:http://.../queryGoods?id=1001&type=t01
REST的url: http://.../goods/1001

可以看出REST特点:url简洁,将参数通过url传到服务器,而传统的url比较啰嗦,而且现实中浏览器地址栏会拼接一大串字符,相必你们都见过吧。但是采用REST的风格就会好很多,现在很多的网站已经采用这种风格了,这也是潮流方向,典型的就是url的短化转换。 我认为理解RESTful的核心就是理解Representational State Transfer这三个单词的意思。 具象的,就是指表现层,也就是“资源”,什么是资源呢?网站就是资源共享的东西,客户端(浏览器)访问web服务器,所获取的就叫资源。比如html,txt,json,图片,视频等等。浏览器通过URI确定一个资源,但是如何确定它的具体表现形式呢?应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。 状态转换,就是客户端和服务器互动的一个工程,在这个过程中产生了数据的状态的变化叫做状态转换。客户端访问必然使用HTTP协议,HTTP协议实际上含有4个表示操作方式的动词,分别是 GET,POST,PUT,DELETE,他们分别对应四种操作。GET用于获取资源,POST用于新建或者更新资源,PUT用于更新资源,DElETE用于删除资源。GET和POST是表单提交的两种基本方式,比较常见,而PUT和DElETE不太常用。而且HTTP协议是一种无状态协议,这样就必须把所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer) 综合上面的解释,RESTful架构就是: 每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种表现层; 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。 需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准,汲取了WWW的成功经验:无状态,以资源为中心,充分利用HTTP协议和URI协议,提供统一的接口定义,使得它作为一种设计Web服务的方法而变得流行。在某种意义上,通过强调URI和HTTP等早期Internet标准,REST是对大型应用程序服务器时代之前的Web方式的回归。目前Go对于REST的支持还是很简单的,通过实现自定义的路由规则,我们就可以为不同的method实现不同的handle,这样就实现了REST的架构。 上边说的是标准,但是实际开发中并没有全部实现标准,因为那样会增加开发成本。增加代码复杂度。我们就ssm框架例举一下restful风格的开发方法。 需求:RESTful方式实现商品信息查询,返回json数据 1.添加DispatcherServlet的rest配 //添加spring的servlet

<servlet>
<servlet-name>springmvc-servlet-rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
//映射路径
<servlet-mapping>
<servlet-name>springmvc-servlet-rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

2.URL 模板模式映射

@RequestMapping("/Items/{id}")
public @ResponseBody Items(@PathVariable("id") String id,Model model) throws Exception{
//方法中使用@PathVariable获取id的值,使用model传回页面
//调用 service查询商品信息
ItemsCustom items = itemsService.findItemsById(id);
return items;
}

解释:@RequestMapping(value="/ Items/{id}"):{×××}占位符,请求的URL可以是“/Items/1”或“/Items/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。 @PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。 如果RequestMapping中表示为"/Items/{id}",id和形参名称一致,@PathVariable不用指定名称。 简单讲就是使用了两个注解@ResponseBody和@PathVariable,@ResponseBody指返回的数据,@PathVariable指传入的参数。@PathVariable将@RequestMapping("/Items/{id}")的占位符id的数据取出,放到形参中,处理完数据用@ResponseBody返回。其中spring框架都给我们定义好了,我们只需要明确指定传入参数是什么,返回 值是什么就行了,而指定方式就是两个注解。是不是很方便?这就大大简化了开发,提高了效率。

作者:头条号 / 两毛五哥哥 链接:http://toutiao.com/i6319842786224914945/ 来源:头条号(今日头条旗下创作平台) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

共有 人打赏支持
粉丝 0
博文 1
码字总数 1488
×
安安静静的帅着
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: