本文已收录于专栏 《Java》
目录
背景介绍
在没有使用RESTful风格之前,都是使用传统的Web应用开发的,通常会使用服务器端的脚本语言(如PHP、Java、Python等)来处理用户请求,生成动态的HTML页面,以及与数据库进行交互。控制器负责接收用户的请求,处理业务逻辑,并将结果传递给视图进行展示。视图负责将数据呈现给用户,通常是通过生成HTML页面来展示内容。
在这种传统的Web应用中,前端页面和后端业务逻辑通常混合在一起,前端页面直接与后端服务端进行交互,而且页面的展示和数据处理都由服务器端负责。
在这种传统的Web应用中,前端页面通常由服务器动态生成,并且包含大量的后端业务逻辑。前端页面与后端之间的交互通常通过表单提交、页面重载等方式实现,而前端页面的展示和用户交互逻辑也由后端服务器端负责处理。
传统的Web应用(前后端未分离)在开发、维护、扩展和性能等方面存在一些问题,而采用前后端分离的架构可以一定程度上解决这些问题,提高系统的灵活性、可维护性和性能。所以引入了RESTful风格。
概念说明
RESTful风格是一种软件架构风格,它是一种设计网络应用程序的方式,可以使系统更加简单、灵活、可扩展和易于维护。RESTful是Representational State Transfer的缩写,它强调使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,通过URL来定位资源,并使用状态码来表示操作结果。
重点!!!它仅仅是一种风格!!
设计特点
- 基于资源:将系统中的各种数据和功能抽象为资源,通过URL来表示资源的位置,并使用HTTP方法对资源进行操作。
- 状态转移:客户端和服务器之间的交互是无状态的,每次请求都包含足够的信息来完成请求处理,服务器不需要保存客户端的状态信息。
- 统一接口:使用统一的接口(如HTTP方法和URL)来对资源进行操作,使得不同的系统可以通过相同的方式进行交互。
- 无状态:服务器不保存客户端的状态信息,客户端每次请求都需要包含足够的信息来完成请求处理。
代码说明
通过使用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应用。
🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯