【SpringMVC】RESTFul风格设计和实战 第三期

文章目录

  • 概述
  • 一、 RESTFul风格简介
  • 二、 RESTFul风格特点
  • 三、 RESTFul风格设计规范
    • 3.1 HTTP协议请求方式要求
    • 3.2 URL路径风格要求
  • 实战
  • 一、需求分析
  • 二、RESTFul风格接口设计
  • 三、后台接口实现
  • 总结
    • 模糊查询 有范围 返回多数据
    • 用户 添加 与 更新 请求参数接收数据
    • 显示用户详情/删除用户 需要 id 确认查询显示与删除


概述

1

一、 RESTFul风格简介

RESTful(Representational State Transfer) 是一种基于 HTTP 和标准化的设计原则的软件架构风格。
1
学习RESTful设计原则可以帮助我们更好去设计HTTP协议的API接口!!

二、 RESTFul风格特点

  1. 每一个URI代表1种资源(URI 是名词);
  2. 客户端使用GET、POST、PUT、DELETE 4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
  3. 资源的表现形式是XML或者JSON
  4. 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
    1

三、 RESTFul风格设计规范

3.1 HTTP协议请求方式要求

具体的操作要符合HTTP协议定义的请求方式的语义

操作请求方式
查询操作GET
保存操作POST
删除操作DELETE
更新操作PUT

3.2 URL路径风格要求

操作传统风格REST 风格
保存/CRUD/saveEmpURL 地址:/CRUD/emp 请求方式:POST
删除/CRUD/removeEmp?empId=2URL 地址:/CRUD/emp/2 请求方式:DELETE
更新/CRUD/updateEmpURL 地址:/CRUD/emp 请求方式:PUT
查询/CRUD/editEmp?empId=2URL 地址:/CRUD/emp/2 请求方式:GET

根据接口的具体动作,选择具体的HTTP协议请求方式

路径设计从原来携带动标识,改成名词,对应资源的唯一标识即可!


实战

1

一、需求分析

  • 数据结构: User {id 唯一标识,name 用户名,age 用户年龄}
  • 功能分析
    • 用户数据分页展示功能(条件:page 页数 默认1,size 每页数量 默认 10)
    • 保存用户功能
    • 根据用户id查询用户详情功能
    • 根据用户id更新用户数据功能
    • 根据用户id删除用户数据功能
    • 多条件模糊查询用户功能(条件:keyword 模糊关键字,page 页数 默认1,size 每页数量 默认 10)

二、RESTFul风格接口设计

接口设计

功能接口和请求方式请求参数返回值
分页查询GET /userpage=1&size=10{ 响应数据 }
用户添加POST /user{ user 数据 }{响应数据}
用户详情GET /user/1路径参数{响应数据}
用户更新PUT /user{ user 更新数据}{响应数据}
用户删除DELETE /user/1路径参数{响应数据}
条件模糊GET /user/searchpage=1&size=10&keyword=关键字{响应数据}

对于敏感信息,最好使用 POST 和请求体来传递参数

三、后台接口实现

  • 用户实体类
@Data
public class User {private Integer id;private String name;private Integer age;
}
  • controller
@RestController
@RequestMapping("user")
public class UserController {/*** 模拟分页查询业务接口* @param page* @param size* @return*/@GetMappingpublic List<User> show(@RequestParam(required = false,defaultValue = "1") int page,@RequestParam(required = false,defaultValue = "10") int size){System.out.println("分页查询业务!如果参数名和属性名不一样 需要 name = \"page\", 加上名字 ");return null;}/*** 模拟添加 保存 业务接口* @return*/@PostMappingpublic User add(@RequestBody User user){return user;}/*** 模拟用户详情业务接口* @param id* @return*/@GetMapping("{id}")public User detail(@PathVariable Integer id){return null;}// 模拟用户更新业务接口@PutMappingpublic User update(@RequestBody User user){return user;}@DeleteMapping("{id}")public User delete(@PathVariable Integer id){return null;}// 模拟条件分页查询业务接口@GetMapping("search")public List<User> search(String keyword,@RequestParam(required = false,defaultValue = "1") int page,@RequestParam(required = false,defaultValue = "10") int size){return null;}
}

总结

模糊查询 有范围 返回多数据

@RequestParam

1

    /*** 模拟分页查询业务接口* @param page* @param size* @return*/@GetMappingpublic List<User> show(@RequestParam(required = false,defaultValue = "1") int page,@RequestParam(required = false,defaultValue = "10") int size){System.out.println("分页查询业务!如果参数名和属性名不一样 需要 name = \"page\", 加上名字 ");return null;}@GetMapping("search")public List<User> search(String keyword,@RequestParam(required = false,defaultValue = "1") int page,@RequestParam(required = false,defaultValue = "10") int size){return null;}

用户 添加 与 更新 请求参数接收数据

@RequestBody
1

    /*** 模拟添加操作* @return*/@PostMappingpublic User add(@RequestBody User user){return user;}@PutMappingpublic User update(@RequestBody User user){return user;}

显示用户详情/删除用户 需要 id 确认查询显示与删除

@PathVariable
1

    /***用户详情* @param id* @return*/@GetMapping("{id}")public User detail(@PathVariable Integer id){return null;}@DeleteMapping("{id}")public User delete(@PathVariable Integer id){return null;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进腾讯工作一个月,我想辞职了......

前几天&#xff0c;我在网上看到一个微博。 一个应届的校招生&#xff0c;目前入职腾讯&#xff0c;工作了一个月。这一个月给他的感受是大量的写测试用例&#xff0c;自己写测试用例的能力熟练了不少&#xff0c;测试技能倒是没有多大的提高&#xff0c;真正需要技术的工作却…

软考71-上午题-【面向对象技术2-UML】-UML中的图2

一、用例图 上午题&#xff0c;考的少&#xff1b;下午题&#xff0c;考的多。 1-1、用例图的定义 用例图展现了一组用例、参与者以及它们之间的关系。 用例图用于对系统的静态用例图进行建模。 可以用下列两种方式来使用用例图&#xff1a; 1、对系统的语境建模&#xff1b…

【java 分页工具类】分页工具PageBean(149)

分页工具类&#xff1a; package com.itheima3;import java.util.ArrayList; import java.util.List;public class PageBean<T> {private int pageSize; // 每页记录数private int pageNo; // 当前页private int totalPages; // 总页数private int totalRecords; // 总记…

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办?

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办&#xff1f; 在订阅 ChatGPT Plus 时&#xff0c;有时候会出现以下报错 &#xff1a; We are unable to authenticate your payment method. 我们未能验证您的支付方式。 出现 unable to a…

低密度奇偶校验码LDPC(十)——LDPC码的密度进化

一、密度进化的概念 二、规则LDPC码的密度进化算法(SPA算法) 算法变量表 VN更新的密度进化 CN更新的密度进化 算法总结 程序仿真 参考文献 [1] 白宝明 孙韶辉 王加庆. 5G 移动通信中的信道编码[M]. 北京: 电子工业出版社, 2018. [2] William E. Ryan, Shu Lin. Channel Co…

优牛企讯司法涉诉维度全解析,了解这些小白也可以变专家!

在商业的海洋中&#xff0c;信息的掌握就如同舵手对风向的了解。每一条信息都可能成为引领航船前行的关键&#xff0c;尤其是在法律风险的管理上&#xff0c;准确而及时的信息更是企业稳健航行的保障。 优牛企讯&#xff0c;一款专业的企业司法涉诉监控查询工具&#xff0c;它…

SpringMVC03、HelloSpring

3、HelloSpring 3.1、配置版 新建一个Moudle &#xff0c; springmvc-02-hello &#xff0c; 添加web的支持&#xff01; 确定导入了SpringMVC 的依赖&#xff01; 配置web.xml &#xff0c; 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8…

微调模型(Machine Learning 研习之十二)

现在正处于百模乱战的时期&#xff0c;对于模型微调&#xff0c;想必您是有所了解了&#xff0c;毕竟国外的大语言模型一开源&#xff0c;国内便纷纷基于该模型进行微调&#xff0c;从而开始宣称领先于某某、超越了谁。可到头来&#xff0c;却让人发现他们套壳了国外大语言模型…

【第58例】IPD体系进阶:战略的五个核心要素

目录 1. 内容简介 2. 计划与行动 3. 计划层面 CSDN学院 作者简介 1. 内容简介 今天继续来更新 IPD 体系进阶专栏:战

Linux Ubuntu 部署SVN

最近需要在ubuntu server上部署一个svn&#xff0c;记录 不需要特定版本 如果不需要特定版本&#xff0c;这样安装就是最简单的 sudo apt update然后开始安装 sudo apt install subversion等到安装完成之后执行查看版本命令&#xff0c;如果正常输出那就没问题了 svnadmin …

C++默认参数详解

目录 缺省参数/默认参数概念&#xff1a; 缺省参数的应用场景&#xff1a; 函数定义定义分离时的默认参数&#xff1a; 简单的编译链接&#xff1a; 缺省参数/默认参数概念&#xff1a; 缺省参数/默认参数&#xff1a;通俗点讲就是形参给的那个某个值 func(int a 0); //例…

uniapp 使用定时器和取消定时器

1. uniapp 使用定时器和清除定时器 1.1. 定义一个timer data(){return{timer: null} }1.2. 设置定时器 //选择适合需求的定时器 this.timer setTimeout( () > {// 这里添加您的逻辑 }, 1000) this.timer setInterval( () > {// 同上 }, 1000)1.3. 清除定时器 这…

差分算法:空调-USACO 2021 December Contest Bronze

4262. 空调 - AcWing题库 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些&#xff0c;而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏&#xff0c;编号为 1…N&#xff0c;每个牛栏里有一头牛。 第 i 头奶牛希望她的牛栏中的温…

汽车协议学习

ⅠOBD 1.OBD接口 OBD有16个引脚&#xff0c;每个引脚的电压不同&#xff08;可以对应不同的协议&#xff09; 车端&#xff1a; 16- 9 (短一点点的) 8-1 &#xff08;长一点的&#xff09; 2.基于OBDⅡ的通信协议 CAN &#xff08;ISO-15765&am…

windows将bat脚本设置为开机自启动

windows将bat脚本设置为开机自启动 使用场景&#xff1a;需要在windows开机启动时直接运行一个bat脚本&#xff0c;通过这个脚本调用写好的python之类的管理工具。 步骤&#xff1a; 1、按下Win R快捷键打开“运行”对话框 2、输入shell:startup&#xff0c;然后按下回车键 3、…

Python-Flask 快学

flask是Python的一个轻型Web框架. 使用pycharm自动创建项目,也可以手动创建,以下是目录的结构: ├── app.py├── static└── templates 一、创建一个简单应用 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "hello world &…

20240309-2-校招前端面试常见问题-NodeJS

校招前端面试常见问题【6】——NodeJS NodeJS Q&#xff1a;NodeJS 的 IO 模型特点是什么&#xff1f;与多线程同步 IO 有什么不同&#xff1f; NodeJS 的 IO 模型&#xff08;更准确的说是 js 的执行环境&#xff0c;也就是 v8&#xff09;的特点是“单线程异步非阻塞”。 …

Linux学习-共用体和枚举,位运算

目录 共用体 ​编辑枚举 位运算 共用体 定义和访问都和结构体类似&#xff1b;区别在于共用体所有的成员变量共享同一片空间&#xff0c;内存空间就是其最大数据类型所占内存的大小&#xff1b; 如果给成员变量2的值&#xff0c;那么成员变量1的值就会被覆盖&#xff1b;主…

实现鼠标移动el-select下拉框的label上面显示出table悬浮窗

首先是对vue代码 实现思路就是在el-option里面放一个span来包裹el-popover&#xff0c;里面在放tabe实现悬浮表格 <el-form-item label"原理图编号"><el-select v-model"data.number" placeholder"请选择" clearable multiple collaps…

外包干了30天,我后悔了。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城…