一文弄懂RESTful

一、概述

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。

自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。

说白了,我们开发程序时,都有接口对吧,用于前端(包括手机端,网页等)调用后台来获取数据,这个接口规范(怎么访问,接口怎么写,数据怎么返回等一系列规范)就是RESTful。

这里面有一套架构叫做REST,符合这套架构规则的程序就叫做RESTful

二、Rest架构的主要原则

  • 网络上的所有事物都被抽象为资源
  • 每个资源都有一个唯一的资源标识符,即URI
  • 同一个资源具有多种表现形式(xml,json等)
  • 对资源的各种操作不会改变资源标识符
  • 所有的操作都是无状态的
  • 符合REST原则的架构方式即可称为RESTful

下面对上面的原则做一些解释:

资源:比如我们调用接口查询某种商品的信息,请求返回的商品信息就是资源

资源标识符:
要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。

URI既可以看成是资源的地址,也可以看成是资源的名称。如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。URI的设计应该遵循可寻址性原则,具有自描述性,需要在形式上给人以直觉上的关联。

REST主要对以下两方面进行了规范

  1. 定位资源的URL风格,例如
    http://bhusk.com/admin/1234
    http://bhusk.com/admin/1234/10/11

下面让我们来看看URI设计上的一些技巧:

  • 使用_或-来让URI可读性更好:
    曾经Web上的URI都是冰冷的数字或者无意义的字符串,但现在越来越多的网站使用_或-来分隔一些单词,让URI看上去更为人性化。 例如国内比较出名的开源中国社区,它上面的新闻地址就采用这种风格, 如http://www.oschina.net/news/38119/oschina-translate-reward-plan。
  • 使用/来表示资源的层级关系:
    例如上述/git/git/commit/e3af72cdafab5993d18fae056f87e1d675913d08就表示了一个多级的资源, 指的是git用户的git项目的某次提交记录,又例如/orders/2012/10可以用来表示2012年10月的订单记录。
  • 使用?用来过滤资源
    很多人只是把?简单的当做是参数的传递,很容易造成URI过于复杂、难以理解。可以把?用于对资源的过滤, 例如/git/git/pulls用来表示git项目的所有推入请求,而/pulls?state=closed用来表示git项目中已经关闭的推入请求, 这种URL通常对应的是一些特定条件的查询结果或算法运算结果。
  • ,或;可以用来表示同级资源的关系
    有时候我们需要表示同级资源的关系时,可以使用,或;来进行分割。例如哪天github可以比较某个文件在随意两次提交记录之间的差异,或许可以使用/git/git /block-sha1/sha1.h/compare/e3af72cdafab5993d18fae056f87e1d675913d08;bd63e61bdf38e872d5215c07b264dcc16e4febca作为URI。 不过,现在github是使用…来做这个事情的,例如/git/git/compare/master…next。
  1. 如何对资源操作
    采用HTTP协议规定的GET、POST、PUT、DELETE动作处理资源的增删该查操作

在这里插入图片描述

三、什么是RESTful

对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).

符合REST约束风格和原则的应用程序或设计就是RESTful.

/emp/1  HTTP GET      查询id=1的emp

/emp/1  HTTP DELETE    删除id=1的emp,实验中直接删除会报405错误,但是采用$.ajax异步删除就没问题

/emp/1  HTTP PUT    更新emp

/emp/add  HTTP POST     新增emp

四、Spring对RESTful的支持

Spring MVC 对 RESTful应用提供了以下支持:

  • 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型

  • 利用@PathVariable讲URI请求模板中的变量映射到处理方法参数上

  • 利用Ajax,在客户端发出PUT、DELETE动作的请求


 @RequestMapping(value = "/{id}", method = RequestMethod.GET)
 public String toUpdate(@PathVariable("id") Integer id, Model model) {}

RequestMapping的一般应用格式。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)

@RequestMapping(value = "/{id}", method = RequestMethod.POST)

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)   // 因为这个需要Ajax请求,所有返回的是个json

@ResponseBody
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)

客户端发送PUT,DELETE请求

可以采用Ajax方式发送PUT和DELETE请求

   $.ajax( {  
           type : "DELETE",  
           url : "/spring_crud_restful/emp/deleteEmp/" + id,  
           dataType : "json",  
           success : function(data) {  
               alert(data);  
               location.href = "/spring_crud_restful/emp/listEmp/1";  
           }  
      });
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值