RESTful

RESTful

  一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

概述

  REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。

原则条件

  REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

  Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

  在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

分层系统

  另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。

  当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。

Spring5中对RESTful风格的支持

在Spring5中RESTful请求方式

  在Spring5中,其对RESTful风格的支持一共有两种方式,其一是比较传统的方式。即:

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

  在RequestMethod中封装了大量的请求方式,如:GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,TRACE。而我们经常操作的就是对数据的增删改查操作,即我们经常使用的请求方式为:GET,POST,PUT,DELETE共四种请求方式。

  其中GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;

  而为了方便书写,Spring5为我们提供了一些简写的书写方式,如:

 @GetMapping("/...")
 @PostMapping("/...")
 @PutMapping("/...")
 @DeleteMapping("/...")
 ...

  上述两种方式无论用哪种都是合适的,而从操作的简便方面来说,我建议还是使用后者。

在Spring5中返回请求的数据

  而对于请求数据的返回,以前使用的是@Controller@ResponseBody,在新的Spring5中,其将两者进行了整合,此时我们可以将其简写为@RestController,这里我们依然是推荐使用后者。

注意事项

在Spring5中添加对put请求方式的支持

  在默认的情况下,Spring是不建议使用RESTful的请求方式的,所以说如果我们在前台中使用put方式进行传参,那么我们在后台中会出现接收不到请求参数的情况,此时如果我们想要在后台中接受到前台请求的参数,那么我们得在应用程序的web.xml文件中添加Spring对put方法的支持,即添加下面的过滤器:

    <filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Spring5中的删除方法

  由于在Spring5中只存在PUT的HttpPutFormContentFilter,而并不存在DELETE的相关Filter,因而在前端通过ajax的DELETE方式请求时,默认其请求参数是无法被Spring5接收的,而其数据如果要想被Spring5接收,那么其只能写入url的请求路径中,比如说我们想向后台传递参数为1的删除操作,我们的前台请求路径可以是这样的:

/acl/1

  其后台接收采用Spring5中的@PathVariable,其接收路径是这样的:

/acl/{id}
...(@PathVariable("id") int id)

  通过上述方式我们就能够成功的获取到前台传入后台的数据

jQuery的注意事项

  我们在前台提交请求的时候往往是采用jQuery来进行提交,而在jQuery中,其建议使用的请求方式一共有两种,其一是get,其二便是post,即我们可以通过下面的方式来向后台请求数据:

$.get(url,[data],[fn],[type])
$.post(url,[data],[fn],[type])

  而如果我们按照习惯,在使用put方法时,我们以$.put开头,那样就会出错,因为在jQuery中并没有该方法。而我们如果想采用jQuery的put方式请求,那么我们得这样进行操作:

	$.ajax({
        url : '请求路径'
        ,data : '请求参数'
        ,type : 'put' //提交方式,这里与Spring5中接受的方式相同,故可以使用put等方式进行提交
        ,success : function(res){
            ...
        }
    });

Spring5中的HiddenHttpMethodFilter过滤器

  该种方式是添加下面的过滤器

	<filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  其后台支持PUT,DELETE方法以及其参数的过程其实也是在前台采用POST的方式进行数据提交的,而其不同之处就在于,其在POST提交的同时还会传递额外的参数,比如说传递参数_method:"PUT"_method:"DELETE",这样后台的@PutMapping@DeleteMapping就可以接收到相应的参数了。

请求方式的幂等性

什么是幂等性

  每次HTTP请求相同的参数,相同的URL,产生的结果是相同的。

RESTful常用方法的幂等性

  在常用的四种RESTful请求方式中,GET,PUT,DELETE由于每一次提交,其对资源产生的影响都是相同的,所以说他们都满足幂等性。而POST提交由于每次请求其都会重新产生新的资源,故不满足幂等性。因此我们一般插入数据时采用POST,修改数据时采用PUT。

参考资源: RESTful


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值