您现在的位置:首页 » 新闻动态 » 公司新闻 公司新闻
越来越多的web服务开始采用RESTful风格设计和实现
发布日期:2016-08-18

      文章概要:

      什么是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的servletspringmvc-servlet-restorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:spring/springmvc.xml//映射路径springmvc-servlet-rest/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框架都给我们定义好了,我们只需要明确指定传入参数是什么,返回 值是什么就行了,而指定方式就是两个注解。是不是很方便?这就大大简化了开发,提高了效率。

  • 1.公司登记注册于2003年1月27日,清远市桑达电子网络媒体有限公司
    2.公司2006年起成为清远市政府定点协议供货商,电子采购供货商
    3.公司2007年被清远市相关政府部门评为安防行业状元
    4.公司2007年起成为长城电脑清远如意服务站(SP368)
    5.公司2007年承建清远市横河路口电子警察工程,开创清远电子警察先河。
  • 6.公司2007年起成为IBM合作伙伴、公司2010年底成为金蝶软件清远金牌代理(伙伴编号:30030013)
    7.公司组团队参加南方都市报组织的创富评选,获广东80强。公司申请多项软件著作权、专利权
    8.2016年起公司成为粤东西北地区为数不多的双软企业,确立“让软件驱动世界,让智能改变生活!"企业理想
    9.2016-01-29更名为广东互动电子网络媒体有限公司
    10.2021-01-13更名为广东互动电子有限公司
  • 投资合作咨询热线电话:0763-3391888 3323588
  • 做一个负责任的百年企业! 天行健,君子以自强不息;地势坤,君子以厚德载物;
    为用户创造价值! 让软件驱动世界; 让智能改变生活; 超越顾客期望,帮助顾客成功;
    对客户负责,对员工负责,对企业命运负责!帮助支持公司的客户成功;帮助忠诚于公司的员工成功!
  • 联系电话:0763-3391888 3323588 3318977
    服务热线:18023314222 QQ:529623964
  • 工作QQ:2501204690 商务QQ: 602045550
    投资及业务投诉QQ: 529623964
    微信:小米哥 微信号:qysed3391888
    腾讯微博:桑达网络-基石与起点
  • E-MAIL:222#QYSED.CN ok3391888#163.com (请用@替换#)
在线客服
  • 系统集成咨询
    点击这里给我发消息
  • 网站\微信\软件咨询
    点击这里给我发消息
  • 售后服务
    点击这里给我发消息
  • 投资合作
    点击这里给我发消息