一、什么是REST?

        REST(英文:Representational State Transfer,简称REST,意思:表述性状态转换,描述了一个架构样式的网络系统,比如web应用)。

        它是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,它主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存等机制。

        它本身并没有什么使用性,其核心价值在于如何设计出符合REST风格的网络接口。

二、什么是RESTful?

        REST:指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful

RESTful的特性

        资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特性的URI。要获取这个资源,访问它的URI就可以,因此URI即为每一个资源的独一无二的识别符。

        表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式。

        状态转换(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(State Transfer)。而这种转换是建立在表现层之上的,所以就是“表现层状态转换”。具体说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。他们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。

如何设计RESTful应用程序的API?

  • 路径设计:数据库设计完毕之后,基本上就可以确定有哪些资源要进行操作,相对应的路径也可以设计出来。
  • 动词设计:也就是针对资源的具体操作类型,有HTTP动词表示,常用的HTTP动词如下:POST、DELETE、PUT、GET

三、SpringBoot中使用Restful风格

        前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery3.6.js"></script>
</head>
<body>
<!--    添加用户-->
<form action="/user" method="post">
    id:<input name="userId"><br>
    名字:<input name="name"><br>
    帐号:<input name="account"><br>
    密码:<input name="password"><br>
    <button>添加</button>
</form>
<!--    更新用户-->
<form id="upd-form">
    <input type="hidden" name="_method" value="PUT">
    id:<input name="userId"><br>
    名字:<input name="name"><br>
    帐号:<input name="account"><br>
    密码:<input name="password"><br>
    <button type="button" id="upd-btn">修改</button>
</form>

<a href="/user">查询所有用户</a>
<a href="/user/1">查询id为1的用户</a>
<button id="del-btn">删除id为1的用户</button>
<script>
    // 删除请求
    $("#del-btn").click(function () {
        $.ajax({
            type: "delete",
            url: "/user/1"
        })
    })
    // 更新请求
    $("#upd-btn").click(function () {
        $.ajax({
            type: "put",
            url: "/user",
            data: $("#upd-form").serialize()
        })
    })
</script>
</body>
</html>

        Controller层

package org.ywz.controller;

import org.springframework.web.bind.annotation.*;
import org.ywz.pojo.User;

/**
 * Restful风格测试程序
 * @author 游王子
 * @date 2021/10/15
 */
@RestController
public class RestfulController {
    @PostMapping("/user")
    public void add(User user) {
        System.out.println("添加用户:" + user);
    }

    @PutMapping("/user")
    public void upd(User user) {
        System.out.println("更新用户" + user);
    }

    @DeleteMapping("/user/{id}")
    public void del(@PathVariable Integer id) {
        System.out.println("删除的id:" + id);
    }

    @GetMapping("/user")
    public void selAll() {
        System.out.println("查询所有");
    }

    @GetMapping("/user/{id}")
    public void selById(@PathVariable Integer id) {
        System.out.println("查询的id:" + id);
    }
}