自学内容网 自学内容网

一文了解什么是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属性用来设置情况的类型。

    @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两个注解的组合功能。

@RestController
@RequestMapping("/xxxxx")
public class ClassesController {

}

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping

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

    @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地址传参或表单传参

    @ApiOperation("查询学生参与颗粒的信息")
    @RequestMapping(value="queryUserGrainParticipationInfo/{id}",method= RequestMethod.GET)
    public String queryUserSignParticipationInfo(@PathVariable("id") Long id) throws Exception {
         System.out.println("查询学生参与签到的信息");
 return id.toString();
    }
@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应用。


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

原文地址:https://blog.csdn.net/weixin_45490198/article/details/137811094

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!