Restful风格

Restful风格

REST即Representational state transfer(表述性状态转移),是一种Web服务的设计风格和开发方式,基于HTTP协议,可以使用XML格式或者JSON格式,是一种轻量级,跨平台,跨语言的架构设计。

1 为什么使用Restful风格

1.1 传统开发模式

在传统开发模式的Web应用中,前端写好静态的HTML页面交给后端,后端把HTML渲染或者重定向到前端界面。这样前端页面看到的效果都是由后端控制的,即后端需要控制前端的展示。

传统开发模式带来的问题

  1. 前后端耦合严重,前端页面会嵌入后端代码,导致代码混乱,难以维护
  2. 开发人员需要前后端兼顾,开发效率低,开发周期长
  3. 开发出的软件响应速度慢,用户体验差
  4. 与前端开发人员沟通协作成本高,前后端开发进度相互影响
1.2 前后端分离模式

前后端分离模式是Web应用的一种架构模式,在开发阶段,前后端人员约定好数据交互接口,即可并行开发与测试。前端开发完成可以独自进行mock测试,后端也可以使用postman等接口测试工具进行功能测试,最后前后端协同进行功能联调测试。

前后端分离模式的核心是后端开发给前端提供接口,前端调用后端提供的REST风格接口获得数据完成页面设计和渲染。即后端提供数据,前端负责显示。

前后端分离模式的优势

  1. 实现前后端解耦,前后端可以并行开发与测试,提供开发效率
  2. 前后端代码解耦,增强代码可维护性
  3. 异步请求的方式,可以很好的应对复杂多变的前端需求
  4. 减少后端服务器的并发压力,提高系统性能

2 Rest架构主要原则

  1. 网络上的所有事物都被抽象为资源
  2. 每个资源都有唯一的资源标识符
  3. 同一个资源具有多种表现形式(xml, json等)
  4. 对资源的各种操作不会改变资源标识符
  5. 所有的操作都是无状态的

3 请求方式

HTTP方法 资源操作 幂等性 安全性 含义
GET SELECT Yes Yes 从服务器取出资源(一个或多个)
POST INSERT No No 在服务器新建一个资源
PUT UPDATE Yes No 在服务器更新资源
DELETE DELETE Yes No 从服务器删除资源
  • 幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。
  • 安全性:对REST接口的访问,不会使服务器资源的状态发生改变。
3.1 传统风格请求方式
3.2 REST风格请求方式

传统的请求方式每次的请求地址,都在描述当前请求的动作,如查询的时候请求地址用了query,添加的时候请求地址用了save等等;这个描述其实没有必要,使用GET请求就表示了查询,POST请求就表示新增;这也是为什么使用restful风格。

4 Springboot中的Restful风格

  • @RestController = @Controller + @ResponseBody
  • @GetMapping = @RequestMapping(method = RequestMethod.GET)
package com.lzy.springboot_study.controller;

import com.lzy.springboot_study.dao.DepartmentDao;
import com.lzy.springboot_study.entity.Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author LiZY
 * @create 2021-06-03 20:53:59
 */
@RestController
public class DepartmentController {

    @Autowired
    DepartmentDao departmentDao;

    @GetMapping("/departments")
    public List<Department> getDepartments() {
        return departmentDao.getDepartments();
    }


    @GetMapping("/departments/{id}")
    public Department getDepartmentById(@PathVariable("id") int id) {
        return departmentDao.getDepartmentById(id);
    }
}

5 参考文章

[1] Restful风格详解

[2] Restful风格(详细介绍 + 案例实现

posted @ 2022-06-22 11:09  ylyzty  阅读(153)  评论(0编辑  收藏  举报