如何理解 CRUD 与 REST

news2024/10/4 21:24:48

全文 2070 字

阅读时间约 6 分钟

本文首发于码匠技术博客​​​​​​​

目录

什么是 CRUD?

CRUD 的发展简史

CRUD 规则

什么是 REST?

REST 的发展简史

REST 规则

CRUD VS REST

关于码匠

CRUD 和 REST 是应用开发领域中两个比较常见的概念,但由于二者之间概念存在重叠而常常被混淆。简单来说,REST 是一种软件架构风格,是一种针对网络应用的设计和开发方式。而 CRUD 是一个缩写,指的是数据库中可以执行的四种基本操作:创建 (Create)、读取 (Read)、更新 (Update) 和删除 (Delete)。

本篇文章码匠将带大家深入了解二者的异同以及具体使用过程中的注意事项。

什么是 CRUD?

CRUD 是来自于编程领域的缩写,它指的是被认为是实现持久性存储应用的四个功能:创建、读取、更新和删除。但是,现如今 CRUD 常作为「CRUD 应用」出现,「CRUD 应用」指的是通过一个网络应用或移动应用的用户界面,进行创建、读取、更新和删除信息的操作。

码匠提供图形界面形式的查询设置

CRUD 的发展简史

CRUD 问世于 20 世纪 80 年代,用于描述 SQL 中的数据库基本操作。首次提及是在 1990 年 Haim Kilov 的文章《从语义到面向对象的数据建模》中,后来在 1983 年 James Martin 所著的《管理数据库环境》一书中首次广为人知。

CURD 设计之初是为了增强数据库的持久性存储,而在现代软件开发中,它又为 SQL、DDS 和 HTTP 协议等应用程序提供了设计原则。

 

CRUD 规则

从创建到删除,CRUD 基本包含一个循环的概念:

  1. 创建 (CREATE) 用来添加一项或多项纪录,在数据库中表现为通过 INSERT 语句生成新的记录。
  2. 读取 (READ) 则是根据不同的参数检索数据,相当于 SQL 中的 select 语句。
  3. 更新 (UPDATE) 过程用于更新和修改纪录。
  4. 删除 (DELETE) 过程为删除一项或多项纪录。

CRUD 后来还出现了其他变形:

  1. CRUDL:创建 (create)、读取 (read)、更新 (update)、删除 (delete)、列表 (listing)
  2. BREAD:浏览 (browse)、读取 (read)、编辑 (edit)、添加 (add)、删除 (delete)
  3. DAVE:删除 (delete)、添加 (add)、预览 (view)、编辑 (edit)
  4. CRAP:创建 (create)、复制 (replicate)、追加 (append)、处理 (process)

什么是 REST?

REST 协议的创始人Roy Fielding 将 REST 描述为分布式超媒体系统内架构元素的抽象化。REST 架构风格为网络系统开发提供了统一的标准,并规定了系统的互动方式。

REST 的发展简史

时间推回 2000 年,这个时候开发人员并没有一个用来开发网络 API 的标准,他们自创了一大堆不同的协议,这些协议大都复杂繁琐、难以执行。于是 Roy Fielding 和他的同事一起开发了 REST 协议,进而允许两个服务器能在全球范围内交换数据。

符合 REST 的系统被称为 RESTful 系统。这些系统的特点是无状态性以及客户端和服务器的分离。自 2000 年推出以来,REST 已经被用于各种公司各种行业。

 

REST 规则

REST 有六个约束条件:

1. 统一接口

RESTful 架构所遵循的统一性原则禁止在一个 API 中使用多个独立接口。通过简化和解耦架构,每个部分都可以独立发展。统一接口的四个指导原则是:

  • 资源识别:每个资源都有一个资源标识,且每个资源的资源标识可以用来唯一地标明该资源。
  • 通过表述来操作资源:这里的表述是对自身的表述,也就是说一个 REST 系统所返回的资源需要能够描述自身并提供足够的用于操作该资源的信息,比如如何对资源进行 CRUD 等操作。换句话说,一个 REST 服务不需要额外的文档对如何操作资源进行说明。
  • 自描述的信息:在 REST 系统中传递消息时还要能提供自身如何被处理的信息。例如该消息所使用的 MIME 类型,是否可以被缓存等。
  • 超媒体作为应用状态的引擎:客户端通过协议主体内容、查询字符串参数、请求头和请求 URI(资源名称)传递状态。服务端通过协议主体内容、状态码和响应头向客户提供状态。

2. 客户/服务器模型(CS 架构)

通信只能由客户端单方面发起,表现为请求-响应的形式。客户-服务器模型约束背后的原则是关注点的分离,即分离用户界面和数据存储两个关注点。这有助于客户端和服务器的独立发展,同时改善了用户界面跨平台的可移植性和可扩展性。

3. 无状态

无状态规定,从客户端到服务器的每个请求必须包含理解和完成该请求所需的全部信息,不能利用任何存储在服务器端的上下文,所以,会话状态要全部保存在客户端。

4. 缓存

缓存是为了改善网络效率而提出的,缓存要求服务器的响应中的数据被隐式地或显式地标记为可缓存或不可缓存。例如,如果响应是可缓存的,那么以后再遇到相同的请求该相应数据可重复利用。

5. 分层系统

分层系统通过限制层次之间的行为(例如每一层对其他层都是只读的)来将架构分解为若干层级。每个层级之间都有一定的独立性,中间层次还支持通过实现负载平衡和共享缓存来提高系统的可扩展性。

6. 按需代码(Code-On-Demand 可选)

客户端可以下载运行服务端传来的代码(比如 JavaScript)通过减少一些功能简化了客户端。

CRUD VS REST

相同点

CRUD 的每个操作都可以被映射到 DDS、SQL 和 HTTP 协议中。HTTP 协议是 RESTful 架构中资源之间的联系,是 REST 基础的核心部分。而 REST 架构被用来在 Web 应用中执行 CRUD 操作。

CRUD 操作与 HTTP 协议的映射:

CRUD 操作

HTTP 协议

CREATE

POST

READ

GET

UPDATE

PUT

DELETE

DELETE

看似 CRUD 和 REST 存在基本指令的重叠,但应该注意的是,REST 并不简单地等同于 CRUD,RESTful 架构也不仅仅意味着映射 GET、PUT、POST 命令。

不同点

CRUD 主要被用于描述软件系统中数据库或者持久层的基本操作功能。而 REST 架构的核心理念是使用 HTTP 作为应用协议操作网络资源,并且以超媒体作为应用状态转移的载体。码匠 - 快速开发内部系统快速开发内部系统https://majiang.co/

关于码匠

码匠是国内一款面向开发者的低代码平台,我们为将您提供一种更便捷的数据可视化方式。相较于国外开发的 HRM/Admin/CRM/CMS 等后台工具,我们的 UI 界面设计更加适合国内业务场景。同时我们还整合了多款国内常见数据源,包括飞书、企业微信、钉钉、阿里云 OSS 等。不仅如此,我们还一站式提供了企业内部系统常用的租户管理、细粒度的权限控制、审计日志等功能,让您快速搭建后台应用的同时,也为您的企业信息安全保驾护航。

我们的创始团队来自谷歌、快手、百度等公司,深刻理解快速迭代的软件系统对业务的重要性和当下软件开发的复杂性,我们认为在未来软件不会是从零开发的,于是我们重新思考,创造新的工具,帮助公司更好更快地开发软件。

想要了解更多,欢迎来亲自探索!

 

本文为原创内容,版权归「码匠」所有,欢迎文末点赞、收藏、评论!转载请联系我们。

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

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

相关文章

解决安装Tensorflow2: ERROR annot determine archive format of XXX保存问题

安装命令报错: ERROR: Cannot unpack file C:\Users\lenovo\AppData\Local\Temp\pip-unpack-mdiptqlf\simple.html (downloaded from C:\Users\lenovo\AppData\Local\Temp\pip-req-build-oq32e170, content-type: text/html); cannot detect archive format解决方法…

Barra模型因子的构建及应用(一)

一、摘要 Barra模型可以追溯至1974年,美国学者Barr Rosenberg对投资组合的风险和收益进行分析的多因子风险模型。随后Rosenberg成立了Barra,并针对美国权益市场提出了Barra USE1模型,现在已更新到USE4;而针对中国权益市场提出的B…

微服务架构下的可观测性

微服务架构下的可观测性 一、服务可观测性 传统架构下排查问题传统项目在出现异常或性能问题时,通常都是基于系统日志文件来排查。而在微服务分布式部署架构下,日志文件随微服务分散存储,对于排查问题工作量很大。传统监控告警平台也仅针对平…

痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题。 前段时间有客户在官方社区反映 i.MXRT1170 下使用官方 SDK 里 FlexSPI 驱动去擦写 Flash 时不能很好地支持全局中断。客户项目…

内核解读之内存管理(2)内存管理三级架构之内存结点node

文章目录0、概述1、内存节点node0、概述 结合NUMA的架构,Linux抽象出了三级内存管理架构:内存节点node、内存区域zone和物理页框page。 在NUMA模型中,每个CPU都有自己的本地内存节点(memory node),而且还…

qq录制视频保存到哪了?如何更改qq录屏存储位置

一、查看qq录制视频保存位置如果有录制视频的需求,相信大部分人都是使用qq自带的录屏功能来录制视频。那qq录屏后的视频在哪里去找?今天就给大家分享如何查看qq录制完的视频保存位置操作方法:第一步:电脑上登录qq,在qq…

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 1,概述 本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。 2,创建方法 第1步:确定打开PCB文件的软件是 Allegro PCB SI 如果不是Allegro PCB SI,可执行File→Change Editor…更换软…

尚医通-查询所有子节点-前端整合-更新医院状态(二十三)

目录: (1)医院管理-查询所有子节点接口 (2)医院列表-前端整合 (3)更新医院上线状态-功能实现 (1)医院管理-查询所有子节点接口 先做一个省的查询 在DictContrlller…

数据可视化大屏百度地图GPS轨迹位置感知状态开发实战案例解析(包含缩放控件、点线覆盖物、弹窗、标注图标分类功能)

系列文章目录 1.数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图) 2.数据可视化大屏百度地图API开发:停车场分布标注和检索静态版 3.百度地图高级开发:map.getDistance计算多点之间的距离并输入…

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(二)

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(二)一、实验目的二、 实验内容2.2、实验内容2:求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积三、 实验步骤3.2、顺序程序设计实验题目2:求圆周长、…

CTF文件隐写总结之图片

1.1 Fastjson反序列化 代码审计 本项目引入的Fastjson版本为1.2.58,该版本存在反序列化漏洞。 已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。 我们关注两个函数JSON.parse()和JSON.parseObject(),并且执行函数内参数用户可控 Edi…

【博客系统】后台设计

文章目录博客系统(使用模板技术)准备工作数据库设计表设计文章表用户表完整SQL封装数据库操作代码创建DBUtil创建Blog类和User类创建BlogDao类和UserDao类实现insert实现selectAll实现selectOne实现delete实现selectByName实现selectByUserId验证数据库代…

Python 操作 MySQL 之 pysql 与 SQLAchemy

一、pymsql pymsql 是 Python 中操作 MySQL 的原生模块,其使用方法和 MySQL 的SQL语句几乎相同 1、下载安装 pip3 install pymysql 2、执行SQL 执行 SQL 语句的基本语法: 需要注意的是:创建链接后,都由游标来进行与数据库的…

CATCTF wp

文章目录ez_jsCat_Jumpmiao~CatCatPeekabooMeowMeowCatchCatCatFlagNepnep 祝你新年快乐啦!ez_js f12搜索score,修改超过分数1即可获得flag 然后获得flag地址 访问即可 Cat_Jump 仿真玩半天不知道怎么解,最后直接搜关键词出的 挺可惜…

唱歌就能画一幅图像? #whisper-to-stable-diffusion

现在热门的不仅是多模态的文本图像生成,前阵子,OpenAI 发布了一个自动语音识别系统 Whispe 。在处理口音、背景噪声以及技术术语方面,Whisper 几乎达到了人类的水准。那么将 Whisper 与 Stable Diffusion 结合,可以直接完成语音生…

回顾 OpenMLDB 2022 之旅 | 开源之路,行将致远

2022年初,OpenMLDB 尚且懵懂稚嫩。彼时的我们刚刚走过开源道路上的第一个秋天,还没有结出丰硕的果实。前进着,期待着,2022的一切徐徐展开: 请旋转手机 和 OpenMLDB 共同回忆 2022 之旅 2022年末,OpenMLDB …

必看!.NET 7 在网络领域的四大更新

最新的 .NET 7 现已发布,我们想介绍一下其在网络领域所做的一些有趣的更改和添加。这篇文章我们将讨论 .NET 7 在 HTTP 空间、新 QUIC API、网络安全和 WebSockets 方面的变化。 HTTP 改进了对连接尝试失败的处理 在 .NET 6 之前的版本中,如果连接池中…

云计算运营—04 FusionSphere OpenStack 6.5方案介绍

FusionSphere OpenStack 6.5方案介绍 OpenStack 系统架构 OpenStack是什么 OpenStack是目前最流行的开源云操作系统: 资源抽象 OpenStack将各类硬件资源,通过虚拟化与软件定义的方式,抽象成资源池 资源分配与负载调度 OpenStack根据管理员…

Ardupilot EKF3核心算法《状态量的协方差矩阵推导》

目录 文章目录 目录摘要1.协方差矩阵推导2.关于 F的计算2.1 计算F的前四维关于四元数的状态方程2.2 计算F 的5-10维关于速度和位置的状态方程3.其他协方差的传播3.1 关于角增量偏差的协方差传播3.2 关于速度增量偏差的协方差传播3.3 关于地理坐标系地磁磁场矢量的协方差传播3.4…

【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

目录 一.什么是Vue 1.前端技术的发展(html、CSS、JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM、事件处理、动画处理、Ajax交互变得非常简洁、方便。是JavaScript的库。 (&a…