RESTful风格简介与Java实现

1. RESTful风格

1.1 简介与特点

RESTful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTful适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

RESTful特点包括:

1、每一个URI代表1种资源;

2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源(PATCH则比较少用到);

3、通过操作资源的表现形式来操作资源;

4、资源的表现形式是XML或者HTML;

5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。

1.2 RESTful架构

  • RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点;

  • RESTful架构将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图;后端服务器为前端服务器提供接口。浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型;

  • 项目开发引入RESTful架构,利于团队并行开发。在RESTful架构中,将多数HTTP请求转移到前端服务器上,降低服务器的负荷,使视图获取后端模型失败也能呈现。但RESTful架构却不适用于所有的项目,当项目比较小时无需使用RESTful架构,项目变得更加复杂。所以要根据项目的实际情况评估是否使用RESTful架构,在如今这种架构也是越来越流行的;

  • 所谓的前后端分离也大多是使用RESTful架构,由后端工程师(假定使用java语言)编写好dao,service等逻辑,然后再编写好controller控制器后,暴露接口api给前端工程师,这时,前端工程师(假定使用Vue)就可以通过axios解决跨域问题,动态获取到存储于诸如MySQL数据库的数据,实现动态网站的开发。

2 RESTful开发

2.1 常见的RESTful风格调用

  • GET:请求从服务器获取特定资源。举个例子:GET /student(获取所有学生)。

    	/**
         * GET :请求从服务器获取特定资源。举个例子:GET /student(获取所有学生)
         * @return List
         */
        @GetMapping("/student")
        public List<Student> student() {
            return studentService.findAll();
        }
    
  • GET:请求从服务器获取特定资源。举个例子:GET /student/1(获取id为1学生)。

    	/**
         * GET :请求从服务器获取特定资源。举个例子:GET /student/1(获取id为1学生)
         * @param id
         * @return Student
         */
        @GetMapping("/student/{id}")
        public Student student(@PathVariable("id") Integer id) {
            return studentService.findOne(id);
        }
    
  • POST:在服务器上创建一个新的资源。举个例子:POST /student(添加学生)。

    	/**
         * POST :在服务器上创建一个新的资源。举个例子:POST /student(添加学生)
         * @param student
         */
        @PostMapping("/student")
        public void student(@RequestBody Student student) {
            studentService.add(student);
        }
    
  • PUT:更新服务器上的资源(客户端提供更新后的资源)。举个例子:PUT /student/1(更新学号为 1 的学生的所有信息)。

    	/**
         * PUT :更新服务器上的资源(客户端提供更新后的资源)。举个例子:PUT /student/1(更新学号为 1 的学生的所有信息)
         * @param id
         */
        @PutMapping("/student/{id}")
        public void updateById(@PathVariable("id") Integer id, Student student) {
            studentService.updateAll(id,student);
        }
    
  • DELETE:从服务器删除特定的资源。举个例子:DELETE /student/1(删除学号为 1 的学生)。

    	/**
         * DELETE :从服务器删除特定的资源。举个例子:DELETE /student/1(删除学号为 1 的学生)
         * @param id
         */
        @DeleteMapping("/student/{id}")
        public void deleteById(@PathVariable("id") Integer id) {
            studentService.delete(id);
        }
    

    常用的主要就是这些请求方式,其他的请求方式目前我碰到的不多

你可能感兴趣的:(javaee)