一文了解什么是RESTful风格

本文已收录于专栏 《Java》


目录

背景介绍

在没有使用RESTful风格之前,都是使用传统的Web应用开发的,通常会使用服务器端的脚本语言(如PHP、Java、Python等)来处理用户请求,生成动态的HTML页面,以及与数据库进行交互。控制器负责接收用户的请求,处理业务逻辑,并将结果传递给视图进行展示。视图负责将数据呈现给用户,通常是通过生成HTML页面来展示内容。

在这种传统的Web应用中,前端页面和后端业务逻辑通常混合在一起,前端页面直接与后端服务端进行交互,而且页面的展示和数据处理都由服务器端负责。

在这种传统的Web应用中,前端页面通常由服务器动态生成,并且包含大量的后端业务逻辑。前端页面与后端之间的交互通常通过表单提交、页面重载等方式实现,而前端页面的展示和用户交互逻辑也由后端服务器端负责处理。

传统的Web应用(前后端未分离)在开发、维护、扩展和性能等方面存在一些问题,而采用前后端分离的架构可以一定程度上解决这些问题,提高系统的灵活性、可维护性和性能。所以引入了RESTful风格。

概念说明

RESTful风格是一种软件架构风格,它是一种设计网络应用程序的方式,可以使系统更加简单、灵活、可扩展和易于维护。RESTful是Representational State Transfer的缩写,它强调使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,通过URL来定位资源,并使用状态码来表示操作结果。

重点!!!它仅仅是一种风格!!

设计特点

  1. 基于资源:将系统中的各种数据和功能抽象为资源,通过URL来表示资源的位置,并使用HTTP方法对资源进行操作。
  2. 状态转移:客户端和服务器之间的交互是无状态的,每次请求都包含足够的信息来完成请求处理,服务器不需要保存客户端的状态信息。
  3. 统一接口:使用统一的接口(如HTTP方法和URL)来对资源进行操作,使得不同的系统可以通过相同的方式进行交互。
  4. 无状态:服务器不保存客户端的状态信息,客户端每次请求都需要包含足够的信息来完成请求处理。

代码说明

通过使用spring mvc中的注解可以更方便的实现Restful风格的API设计。比如可以使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等注解来指定不同的HTTP方法,使用@RequestMapping注解来指定URL路径,从而实现Restful风格的API设计。通过合理使用RequestMapping注解,可以使代码更加清晰和易于维护。

@RequestMapping

此注解作用于方法上,用来设置当前控制器方法请求访问路径。value属性用来设置请求访问路径,method属性用来设置情况的类型。

java 复制代码
    @ApiOperation("创建班级")
    @RequestMapping(value="createClasses",method= RequestMethod.POST)
    @Transactional(rollbackFor = Exception.class)
    public Boolean createClasses(@RequestBody Classes classes){

        if(classesManage.checkClassesInfo(classes)) {
            classesManage.setClasses(classes);
            classesDao.save(classes);
            return true;
        }
        return false;
    }

@RestController

此注解作用于类上,用来设置当前控制器类为RESTful风格,等同于 @Controller 与 @ResponseBody两个注解的组合功能。

java 复制代码
@RestController
@RequestMapping("/xxxxx")
public class ClassesController {

}

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping

此注解作用于方法上,用来设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作。

java 复制代码
    @ApiOperation("新增课表")
    @PostMapping("/insertCurriculum")
    public Curriculum insertCurriculum(@RequestBody Curriculum curriculum) {
        Curriculum curriculumResult = curriculumDao.save(curriculum);

        // 清除
        entityManager.clear();
        Curriculum curriculumObject = curriculumDao.findById(curriculumResult.getId()).get();
        Hibernate.initialize(curriculumObject.getClasses().getActorClasses());
        courseScheduleList.notifyClasses(curriculumObject);

        // 若增加课表为当天课表;则放入队列中
        if(DateUtils.isSameDay(curriculum.getStartTime(),new Date())){
            System.out.println("上课时间为当天");
            // 放入队列 上课与结课队列
            courseScheduleList.putQueues(curriculumObject);
            // 放入当日课表集合
            courseScheduleList.list.put(""+curriculumObject.getId(),curriculumObject);
        }
        return curriculumResult;
    }

@PathVariable、@RequestBody、@RequestParam

此注解作用于方法的形参上,用来设置绑定路径参数与处理器方法形参间的关系,@PathVariable要求路径参数名与形参名一一对应。@RequestBody 用于接收JSON数据。@RequestParam 用于接收URL地址传参或表单传参

java 复制代码
    @ApiOperation("查询学生参与颗粒的信息")
    @RequestMapping(value="queryUserGrainParticipationInfo/{id}",method= RequestMethod.GET)
    public String queryUserSignParticipationInfo(@PathVariable("id") Long id) throws Exception {
         System.out.println("查询学生参与签到的信息");
	 return id.toString();
    }
java 复制代码
@RequestMapping(value="checkLogin",method= RequestMethod.POST)
    public Actor checkLoginInfo(@RequestBody Actor actor){
        actor = actor.checkStudentLoginInfo();
        // 如果班级不为空,则更新内存该中该学生登录状态
        List<Classes> classList = classesManage.getClassesList();
        Actor finalActor = actor;
        executor.execute(() -> {
        for(Classes classes:classList){
            for(ClassesActor classesActor :classes.getActorClasses()){
                Actor classActor = classesActor.getActor();
                if(classActor.getId().equals(finalActor.getId())){
                    classActor.setIsLogin(1);
                }
            }
          }
        });
        return actor;
    }

总结提升

RESTful风格的接口设计具有简单、灵活、可扩展、易于维护和高性能等优势,逐渐成为现代Web应用开发的主流架构风格。通过遵循RESTful原则,开发者可以设计出更加现代化、高效和易于维护的Web应用。

🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯

相关推荐
柯南二号2 分钟前
【后端】【Java】RESTful书面应该如何写
java·开发语言·restful
JIngJaneIL6 分钟前
基于Java+ vueOA工程项目管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
爱学习的小可爱卢27 分钟前
JavaEE进阶——SpringBoot拦截器详解:从入门到实战
java·spring boot·后端
柯南二号1 小时前
【后端】【Java】一文详解Spring Boot RESTful 接口统一返回与异常处理实践
java·spring boot·状态模式·restful
汤姆yu1 小时前
基于springboot的运动服服饰销售购买商城系统
java·spring boot·后端
期待のcode1 小时前
Springboot数据层开发—Springboot整合JdbcTemplate和Mybatis
spring boot·后端·mybatis
柯南二号1 小时前
【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发
java·spring boot·restful
Jul1en_1 小时前
【Spring】实现验证码功能
java·后端·spring
IT_陈寒2 小时前
Java并发编程避坑指南:从volatile到ThreadLocal,8个实战案例解析线程安全核心原理
前端·人工智能·后端
Victor3562 小时前
Netty(10)Netty的粘包和拆包问题是什么?如何解决它们?
后端