springMVC高级应用——如何开发RESTful API

0.前言

对于springmvc的基础开发相信大家已经不陌生了,不过对于一些高级应用,我们还需要学习熟悉。因此,本篇博客将介绍如何使用springmvc开发RESTful API,有几个新的知识点需要掌握一下。

1.RESTful介绍

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。Fielding将他对互联网软件的架构原则,定名为REST。如果一个架构符合REST原则,就称它为RESTful架构。


REST(Representational State Transfer):表述性状态转移是一种跨平台、跨语言的架构风格,而不是一种标准
什么是表述性状态转移呢?以下是我的理解:

  •     表述性:每个资源都有一个唯一的资源标识符URI,而这些资源又可以用XML、JSON等方式来表述
  •     状态:服务器资源的状态。这个资源可能:已存在、未被创建、已删除等。
  •     转移:客户端通过使用HTTP协议定义的通用动词方法,发起Http请求,使得服务端的资源状态发生转变。

因此,一个RESTful架构应该满足:

  1.  用URL来描述资源而不是行为;
  2.  使用HTTP方法来描述行为,使用HTTP状态码来表示不同结果;
  3.  使用JSON数据交互,对服务器端资源进行操作,实现"表述性状态转移"。

比如:

传统请求写法和RESTful请求的对比
动作 传统请求 METHOD RESTful请求 METHOD
查询 /user/query?name=zhangsan GET /user?name=zhangsan GET
详情 /user/getInfo?id=1 GET /user/1 GET
新增 /user/add?name=lisi POST /user POST
修改 /user/update?id=1&name=tom POST /user/1 PUT
删除 /user/delete?id=1 POST /user/1 DELETE

可以看到,RESTful风格明显要简洁许多。

2.映射配置

由于RESTful风格的原因,我们的前端控制器DispatcherServlet的拦截形式不能像是以前那种*.do或者*.action了,需要配置成"/"(注意不是“/*“)

/

如果是SpringBoot构建的项目,默认的拦截形式就是“/”,不用再进行配置。(通过server.servlet.path属性)

3.相关注解

@RestController

这个注解是@Controller和@ResponseBody的结合,标注在class上,声明这是一个RESTful的Controller,返回的数据是JSON

@GetMapping

@RequestMapping(method = RequestMethod.GET)的变体,同理还有PostMapping、PutMapping、DeleteMapping

@PathVariable

RESTful的调用经常会通过URL传参,此时使用@PathVariable可以获取URL中包含的参数,例如

    @GetMapping("/user/{id}")
    public User info(@PathVariable Long id){
        System.out.println(id);
        return new User();
    }

而我们如果要对id进行一些简单校验,可以直接在{ }里写上正则表达式,springmvc会自动帮我们解析匹配,如果不满足,就不会进行处理(返回405)。例如:校验id为数字组成

    @GetMapping("/{id:\\d+}")
    public User info(@PathVariable Long id){
        System.out.println(id);
        return new User();
    }

4.结语

关于如何开发RESTful API就介绍到这里吧。有什么不对的地方请各位指正谢谢。

你可能感兴趣的:(spring)