开发规范:Restful风格

REST(REpresentational State Transfer),表述性状态转换,它是一种软件架构的风格。这么说可能太过于专业,有些难以理解,不妨看个案例:

传统风格url

假如说我们需要使用传统风格url发起请求,那么将会是这样的:

1.请求方式:GET URL:http://localhost:8080/user/getById?id=1 含义:查询id为1的用户

2.请求方式:POST URL:http://localhost:8080/user/saveUser 含义:新增用户

3.请求方式:Post URL:http://localhost:8080/user/updateUser 含义:修改用户

4.请求方式:GET URL:http://localhost:8080/user/deleteUser?id=1 含义:删除id为1 的用户

这是传统风格url发起请求的方式,看起来好像没有什么问题,假如说只有一个人进行开发,使用传统风格的url确实没有什么大问题,但是假如说一个项目进行联合开发,很多人一起开发,使用传统风格的url就会出现问题:张三写查询的时候,写的请求路径是”selectById“,李四写的是”findById“,王五写的是”findUser“。但是后端程序接收响应的路径只有一个,就会引起报错,说明在联合项目开发中,传统风格url请求难以维护,所以说不推荐。

Restful风格

假如还是进行上述的请求,我们使用Restful风格进学校请求,就可以很好的规避这些问题:

1.请求方式:GET URL:http://localhost:8080/users/1 含义:查询id为1的用户

2.请求方式:DELETE URL:http://localhost:8080/user/1 含义:删除id为1的用户

3.请求方式:POST URL:http://localhost:8080/users 含义:新增用户

4.请求方式:PUT URL:http://localhost:8080/users 含义:修改用户

REST 强调使用统一的接口来与资源进行交互,这个统一接口主要是基于 HTTP 协议定义好的方法来实现的。最常见的就是对应 “增删改查” 操作的 HTTP 方法:

GET:用于获取资源的表示形式,也就是查询操作。比如,你想查看某个用户的信息,就可以发送 GET 请求到 /users/456(假设 456 是用户的唯一标识),服务器收到请求后会返回该用户相关的数据,像用户名、年龄、地址等信息给客户端,这就如同你去图书馆查询某本书的资料,只需要请求书这一类的资源,然后提供书的id,管理员就会把书的相关内容提供给你一样。

POST:通常用于创建新的资源。例如,要在系统中新增一个用户,客户端可以向 /users 发送 POST 请求,同时在请求体中携带新用户的相关信息(如用户名、密码等),服务器接收到请求后会根据这些信息创建一个新的用户记录并存入数据库,就好比你向图书馆捐赠一本书,提供了书的信息,管理员把新书登记入库那样。

PUT:用于更新现有资源。假如刚才创建的那个用户要修改自己的地址信息,客户端就可以发送 PUT 请求到 /users/456,并在请求体中带上更新后的地址信息,服务器收到后会用新的信息替换原来的地址记录,这类似于你发现图书馆某本书的信息有误,提供了修改后的正确信息,告知管理员进行修改更新一样。

DELETE:顾名思义,是用来删除资源的。比如要删除刚才那个用户账号,就可以向 /users/456 发送 DELETE 请求,服务器收到后会将对应的用户记录从数据库中清除,就好像图书馆把一本破旧不再使用的书从馆藏中移除一样。

无需多言,直接看请求的URL就可以发现Restful风格的好处:通过URL定位需要请求的资源,使用Http的请求描述需要进行操作(正好是最常用的增删改查),使用Restful风格的请求更加的简洁、规范、优雅,是现在主流的请求风格。

注意:

1.REST只是风格,是约定的方式,并不是规定,是可以打破的(但是为了开发的规范,不要打破)。

2.描述功能模块通常使用复数形式(加s),表示这一类的资源,而并非是单个资源。如:users表示请求的是User这一类的资源,books表示请求的是Book这一类的资源。

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

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

相关文章

StarRocks-同步hive数据

官方文档对csv,orc ,json ,parquet都支持的比较好。写文章的时候SR我们生产用的是3.1.x版本 1、同步hive表textfile格式的数据 hive表结构 CREATE EXTERNAL TABLE ads_d_app_rank_inc(filename string COMMENT 解析的文件名称,rank string COMMENT ap…

【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数

1. UDF函数(用户自定义函数) 一般指的是用户自己定义的单行函数。一进一出,函数接受的是一行中的一个或者多个字段值,返回一个值。比如MySQL中的,日期相关的dateDiff函数,字符串相关的substring函数。 先…

详解Qt pdf 之QPdfSelection 选择文本类

文章目录 QPdfSelection 类详解前言 详细说明公共函数说明1. 构造函数2. text3. boundingRect4. isEmpty5. startPage6. endPage 使用场景示例代码代码说明总结 QPdfSelection 类详解 前言 QPdfSelection 是 Qt PDF 模块中的一个类,用于表示在 PDF 文档中被选中的…

记录部署dvwa靶场踩的几个坑

DVWA reCAPTCHA key: Missing 解决方法:网上随便copy一个,粘贴到config.inc.php配置文件里,具体我也是参考这篇文章的:DVWA下载、安装You dont have permission to access this resource.Server unable to read htaccess file, de…

linux——进程间通信及管道的应用场景

linux进程的控制-CSDN博客 liunx——进程间通信(管道通信)-CSDN博客 文章目录 文章目录 前言 二、管道的应用 1.创建子进程 1、描述: 2.创建进程及管理 3、子进程接受任务 4、控制子进程 总结 前言 上篇博客我们学习了进程间通信&…

开发工具WebStorm,VSCode,HbuilderX

WebStorm、VSCode 和 HBuilderX 是三款非常受欢迎的开发工具,各自有不同的特点和适用场景。下面我会详细比较它们的优势和劣势,帮助你选择最合适的开发环境。 1. WebStorm WebStorm 是由 JetBrains 开发的一款强大的 JavaScript IDE,专门针对…

FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现

本文目录索引 工程架构example9工程设计Vivado设计Vitis设计example9工程验证1、读取FLASH ID2、擦除整个FLASH3、Blank-Check4、烧写Golden区位流5、读取FLASH内容6、烧写MultiBoot区位流(升级位流)7、MultiBoot区位流(升级位流)启动example10工程设计Vivado设计Vitis设计exam…

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC(Artificial Intellige…

设计模式学习[10]---迪米特法则+外观模式

文章目录 前言1. 迪米特法则2. 外观模式2.1 原理阐述2.2 举例说明 总结 前言 之前有写到过 依赖倒置原则,这篇博客中涉及到的迪米特法则和外观模式更像是这个依赖倒置原则的一个拓展。 设计模式的原则嘛,总归还是高内聚低耦合,下面就来阐述…

量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于MT4/MT5平台介绍。 MetaT…

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比 目录 BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计…

【Linux】死锁、读写锁、自旋锁

文章目录 1. 死锁1.1 概念1.2 死锁形成的四个必要条件1.3 避免死锁 2. 读者写者问题与读写锁2.1 读者写者问题2.2 读写锁的使用2.3 读写策略 3. 自旋锁3.1 概念3.2 原理3.3 自旋锁的使用3.4 优点与缺点 1. 死锁 1.1 概念 死锁是指在⼀组进程中的各个进程均占有不会释放的资源…

Vue3之弹窗

文章目录 第一步、引入JS第二步、弹框 在前端开发语言Vue3&#xff0c;在管理端如何进行弹窗&#xff1f;下面根据API实现效果。 Element API文档&#xff1a; Element-plus文档 搭建环境可参考博客【 初探Vue3环境搭建与nvm使用】 第一步、引入JS <script lang"ts&…

el-tree的使用及控制全选、反选、获取选中

el-tree的使用及控制全选、反选、获取选中 组件使用获取选中的id全选实现反选实现全部代码 组件使用 引入组件&#xff0c;可以参考官网组件引入参考官网示例写好基础数据结构&#xff0c;不知道怎么转换树形机构的看文章&#xff1a;一维数组转树形 <template><el-…

MySQL - 性能优化

使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句&#xff0c;开发人员可以通过分析 Explain 结果来优化查询语句。 比较重要的字段有: select_type : 查询类型&#xff0c;有简单查询、联合查询、子查询等 key : 使用的索引 rows : 扫描的行数 type &#xff1a;…

2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素

三要素之间关系&#xff1a; 有了虚拟场景Scene&#xff0c;相机录像Camera&#xff0c;在相机小屏幕上看到的Renderer Scene当前空间 Mesh人在场景 Camera相机录像 Renderer显示器上 首先先描述下Scene&#xff1a; 这个场景为三要素之一&#xff0c;一切需要展示的东西都需…

【docker】容器卷综合讲解,以及go实现的企业案例

容器卷&#xff08;Volumes&#xff09;基础讲解&#xff1a; 容器概念 容器卷&#xff08;Volumes&#xff09;是 Docker 提供的一种持久化存储机制&#xff0c;允许容器持久化数据&#xff0c;即使容器被删除或重新创建&#xff0c;数据仍然可以保留。 卷是独立于容器的&…

cin/cout的性能优化和缓冲区同步问题

目录 背景导入 问题 1.1ios::sync_with_stdio(false) 1.2为什么要解除C/C IO流同步? 1.3使用场景 2.1cin和cout的绑定关系 2.2为什么要解除绑定关系? 2.3注意事项 背景导入 大家可以先看一下这段背景知识;后面我会谈谈自己的理解; 1.在C中&#xff0c;标准输⼊输出流…

node.js基础学习-url模块-url地址处理(二)

前言 前面我们创建了一个HTTP服务器&#xff0c;如果只是简单的http://localhost:3000/about这种链接我们是可以处理的&#xff0c;但是实际运用中一般链接都会带参数&#xff0c;这样的话如果我们只是简单的判断链接来分配数据&#xff0c;就会报404找不到链接。为了解决这个问…

基于springboot中小型制造企业质量管理系统源码和论文

信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古以来的…