web应用技术--第9次课后作业(Restful)

一、知识点
RESTful 是一种软件架构风格,核心思想是:把系统中的所有东西都看作"资源",用统一的 URL 定位资源,用 HTTP 方法(GET/POST/PUT/DELETE)描述对资源的操作。

1.RESTful 的核心原则

二、后端代码改了什么?逐行对比

  1. 查询全部
    原来:
@RequestMapping("/userfindAllJson")publicResultfindAllJson(){returnResult.success(userService.findAll());}

URL:GET /api/users/userfindAllJson
问题:URL 里带动词 findAll,而且用了 @RequestMapping(默认支持 GET/POST/PUT/DELETE 所有方法,不精确)
改造后:

@GetMappingpublicResultfindAll(){returnResult.success(userService.findAll());}

URL:GET /api/users
含义:@GetMapping 明确告诉前端——这个接口只能用 GET 方法访问,操作的是 /api/users 这个用户资源集合,返回集合数据
RESTful 语义:获取用户列表

  1. 查询单个(编辑回显用)
    原来:
    没有单独的查询单个接口,编辑页面是在前端先查全部列表,再用 find 过滤匹配 id。
    改造后:
@GetMapping("/{id}")publicResultfindById(@PathVariableIntegerid){returnResult.success(userService.findById(id));}

URL:GET /api/users/1
@PathVariable:把 URL 路径里的 1 提取出来,赋值给 id 参数
RESTful 语义:获取 ID 为 1 的用户资源

  1. 新增
    原来:
@RequestMapping("/addUser")publicResultaddUser(@RequestBodyUseruser){userService.addUser(user);returnResult.success();}

URL:POST /api/users/addUser
问题:URL 里带动词 add
改造后:

@PostMappingpublicResultaddUser(@RequestBodyUseruser){userService.addUser(user);returnResult.success();}

URL:POST /api/users
@PostMapping:明确只能用 POST 方法
RESTful 语义:向 /users 资源集合提交一个新用户,服务端创建资源

  1. 修改
    原来:
@RequestMapping("/updateUser")publicResultupdateUser(@RequestBodyUseruser){userService.updateUser(user);returnResult.success();}

URL:POST /api/users/updateUser
问题:URL 带动词 update,而且 id 藏在请求体里
改造后:

@PutMapping("/{id}")publicResultupdateUser(@PathVariableIntegerid,@RequestBodyUseruser){user.setId(id);userService.updateUser(user);returnResult.success();}

URL:PUT /api/users/1
@PutMapping:HTTP 标准中,PUT 表示全量替换/更新资源
@PathVariable Integer id:从 URL 路径里取 ID,比如 /api/users/1 中的 1
RESTful 语义:用请求体里的数据,替换 ID 为 1 的用户资源

  1. 删除
    原来:
@RequestMapping("/deletebyID")publicResultdeleteById(Integerid){userService.deleteById(id);returnResult.success();}UR

L:POST /api/users/deletebyID?id=1
问题:URL 带动词 delete,参数用 ?id=1 查询字符串传递
改造后:

@DeleteMapping("/{id}")publicResultdeleteById(@PathVariableIntegerid){userService.deleteById(id);returnResult.success();}

URL:DELETE /api/users/1
@DeleteMapping:明确用 DELETE 方法
@PathVariable:ID 放在路径里,不再是 ?id=1
RESTful 语义:删除 ID 为 1 的用户资源

用户接口改为路径参数及前端更新
RESTful 是一种软件架构风格,核心思想是:把系统中的所有东西都看作"资源",用统一的 URL 定位资源,用 HTTP 方法(GET/POST/PUT/DELETE)描述对资源的操作。
一、RESTful 的核心原则
表格
原则 传统写法(你原来的) RESTful 写法(改造后)
URL 是名词,不是动词 /deletebyID、/addUser /users、/users/1
HTTP 方法表动作 全部用 @RequestMapping(任何方法都能访问) GET查、POST增、PUT改、DELETE删
状态码标准化 自己包装 Result{code:1} 保留 Result,同时配合 HTTP 状态码 200/201/404
无状态 每次请求自带完整信息,服务端不保存会话 前后端通过 JSON 交互,不依赖 session
二、后端代码改了什么?逐行对比

  1. 查询全部
    原来:
    java
    @RequestMapping(“/userfindAllJson”)
    public Result findAllJson() {
    return Result.success(userService.findAll());
    }
    URL:GET /api/users/userfindAllJson
    问题:URL 里带动词 findAll,而且用了 @RequestMapping(默认支持 GET/POST/PUT/DELETE 所有方法,不精确)
    改造后:
    java
    @GetMapping
    public Result findAll() {
    return Result.success(userService.findAll());
    }
    URL:GET /api/users
    含义:@GetMapping 明确告诉前端——这个接口只能用 GET 方法访问,操作的是 /api/users 这个用户资源集合,返回集合数据
    RESTful 语义:获取用户列表
  2. 查询单个(编辑回显用)
    原来:
    没有单独的查询单个接口,编辑页面是在前端先查全部列表,再用 find 过滤匹配 id。
    改造后:
    java
    @GetMapping(“/{id}”)
    public Result findById(@PathVariable Integer id) {
    return Result.success(userService.findById(id));
    }
    URL:GET /api/users/1
    @PathVariable:把 URL 路径里的 1 提取出来,赋值给 id 参数
    RESTful 语义:获取 ID 为 1 的用户资源
  3. 新增
    原来:
    java
    @RequestMapping(“/addUser”)
    public Result addUser(@RequestBody User user) {
    userService.addUser(user);
    return Result.success();
    }
    URL:POST /api/users/addUser
    问题:URL 里带动词 add
    改造后:
    java
    @PostMapping
    public Result addUser(@RequestBody User user) {
    userService.addUser(user);
    return Result.success();
    }
    URL:POST /api/users
    @PostMapping:明确只能用 POST 方法
    RESTful 语义:向 /users 资源集合提交一个新用户,服务端创建资源
  4. 修改
    原来:
    java
    @RequestMapping(“/updateUser”)
    public Result updateUser(@RequestBody User user) {
    userService.updateUser(user);
    return Result.success();
    }
    URL:POST /api/users/updateUser
    问题:URL 带动词 update,而且 id 藏在请求体里
    改造后:
    java
    @PutMapping(“/{id}”)
    public Result updateUser(@PathVariable Integer id, @RequestBody User user) {
    user.setId(id);
    userService.updateUser(user);
    return Result.success();
    }
    URL:PUT /api/users/1
    @PutMapping:HTTP 标准中,PUT 表示全量替换/更新资源
    @PathVariable Integer id:从 URL 路径里取 ID,比如 /api/users/1 中的 1
    RESTful 语义:用请求体里的数据,替换 ID 为 1 的用户资源
  5. 删除
    原来:
    java
    @RequestMapping(“/deletebyID”)
    public Result deleteById(Integer id) {
    userService.deleteById(id);
    return Result.success();
    }
    URL:POST /api/users/deletebyID?id=1
    问题:URL 带动词 delete,参数用 ?id=1 查询字符串传递
    改造后:
    java
    @DeleteMapping(“/{id}”)
    public Result deleteById(@PathVariable Integer id) {
    userService.deleteById(id);
    return Result.success();
    }
    URL:DELETE /api/users/1
    @DeleteMapping:明确用 DELETE 方法
    @PathVariable:ID 放在路径里,不再是 ?id=1
    RESTful 语义:删除 ID 为 1 的用户资源

三、前端代码改了什么?





四、前后端页面