【REST2SQL】01RDB关系型数据库REST初设计

news2025/3/3 18:31:14

在这里插入图片描述

0 概念

REST2SQL实现连接数据库,数据库的表或视图即可提供REST的GET\POST\PUT\DELETE请求,SQL可执行SQLECT\INSERT\UPDATE\DELETE语句。

0.1 RDB = Relational Database

即关系型数据库(简称 RDB)是一种以关系(即表格)为基础的数据库,它采用了关系代数等数学概念和方法来处理数据。关系型数据库最早由 E.F. Codd 在 1970 年提出,其核心思想是将数据存储在由多个表格组成的关系中,每个表格包含多行数据和多个列(即属性),每个属性只有一种数据类型。
常见的关系型数据库包括 MySQL、Oracle、Microsoft SQL Server、PostgreSQL 和 SQLite 等。

0.2 SQL = Structured Query Language

即结构化查询语言,具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。

SQL语言的组成:
1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。

SQL 的 Insert Select Update Delete 对应CRUD

0.3 REST = Representational State Transfer

REST是一种基于HTTP协议的软件架构风格,它提出了一组设计原则和约束条件,用于构建可靠、可扩展、易于维护的分布式系统。REST不是具体的技术规范或协议,而是一种通用的架构设计思想。

RESTful API使用HTTP动词(GET、POST、PUT、DELETE)来表示对资源的操作,这样做更符合HTTP的语义,并且减少了API的复杂度。

0.4 CRUD = Create Read Update Delete

crud是指在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。

CRUDSQLREST
创建、插入CreateInsertPost
读取、查询ReadSelectGet
更新UpdateUpdatePut
删除DeleteDeleteDelete

1 REST设计URL

在这里插入图片描述

1.1 URL

http://IP或域名:端口/资源表或视图/查询条件
http://host:port/rest/resource/condition
GET、PUT、DELETE方法可以where条件,同SQL语句的where
GET还可以加orderby排序,同SQL语句select 的 order by
示例 :

http://127.0.0.1:5217/rest/n5217_v/?where=f_gp > '800'&orderby=f_gp desc

1.2 Data

数据提交采用JSON格式。POST和PUT方法需要提交数据
示例1:

{"p_id":5217,"s_mc":"白龙马"}

示例2:

{"F_DM":"005217","N_BS":null,"N_LJ":null,"N_SJ":null,"P_ID":-5217,"S_CYM":null,"S_DP":null,"S_MC":"白龙马"}

2 REST-Methon方法

2.1 GET

Request请求:
url资源后面可以加查询子句,where=过滤条件, orderby=排序条件
以下示例请求都是可以的: (可以浏览器或postman等发起请求)

GET http://127.0.0.1:5217/rest/n5217_v
GET http://127.0.0.1:5217/rest/n5217_v/?where=f_gp > '800'
GET http://127.0.0.1:5217/rest/n5217_v/?orderby=f_gp desc
GET http://127.0.0.1:5217/rest/n5217_v/?where=f_gp > '800'&orderby=f_gp desc
GET http://127.0.0.1:5217/rest/n5217_v/?orderby=f_gp desc&where=f_gp > '800'
GET http://127.0.0.1:5217/rest/n5217_v/?orderby=f_gp desc&where=f_gp > '800' and f_dm is null

CURL请求示例:注意特殊字符需要转义

curl -X GET http://127.0.0.1:5217/rest/n5217_v/?where=f_gp%3E'300900'

Response返回: 结果用JSON,内容包括请求条件和查询结果集。

{"Request":{
   "Content-Type": "",
   "Data": "",
   "Host": "127.0.0.1:5217",
   "Method": "GET",
   "OrderBy": "f_gp desc",
   "Path": "/rest/n5217_v/",
   "RESTorSQL": "REST",
   "ResName": "n5217_v",
   "Where": "f_gp \u003e '800' and k_dm is null"
},
"Response":[
   {
      "F_GP": "835640",
      "F_NEW": "调出",
      "K_DM": null,
      "K_MC": null,
      "N_DSP": 17.78,
      "N_ZZXJ": null,
      "S_DCR": "2023-10-24",
      "S_MC": "富士达",
      "S_RXR": "2023-04-28"
   },
   {
      "F_GP": "834599",
      "F_NEW": "调出",
      "K_DM": null,
      "K_MC": null,
      "N_DSP": 10.13,
      "N_ZZXJ": null,
      "S_DCR": "2023-10-27",
      "S_MC": "同力股份",
      "S_RXR": "2023-04-26"
   },
   {
      "F_GP": "834062",
      "F_NEW": null,
      "K_DM": null,
      "K_MC": null,
      "N_DSP": 6.16,
      "N_ZZXJ": null,
      "S_DCR": null,
      "S_MC": "科润智控",
      "S_RXR": "2023-08-29"
   },
   {
      "F_GP": "833533",
      "F_NEW": null,
      "K_DM": null,
      "K_MC": null,
      "N_DSP": 19.61,
      "N_ZZXJ": null,
      "S_DCR": null,
      "S_MC": "骏创科技",
      "S_RXR": "2023-08-23"
   },
   {
      "F_GP": "830839",
      "F_NEW": "新晋",
      "K_DM": null,
      "K_MC": null,
      "N_DSP": 10.68,
      "N_ZZXJ": null,
      "S_DCR": null,
      "S_MC": "万通液压",
      "S_RXR": "2023-10-26"
   }
]}

2.2 POST

Request请求:
Data数据:采用JSON提交 ,Curl的 --Data 项

curl -X POST http://127.0.0.1:5217/rest/atop --data {\"p_id\":800}

Response返回: 结果用JSON,内容包括新插入的结果集。

{"Request":{
   "Content-Type": "application/x-www-form-urlencoded",
   "Data": {
      "p_id": 800
   },
   "Host": "127.0.0.1:5217",
   "Method": "POST",
   "OrderBy": "",
   "Path": "/rest/atop",
   "RESTorSQL": "REST",
   "ResName": "atop",
   "Where": ""
},
"Response":{"Data":{
   "p_id": 800
},"Row":{
   "Insert rowsAffected": 1
}}}

2.3 PUT

Request请求:
url资源后面可以加查询子句,where="定位要更新的资源集。
Data数据:采用JSON提交 ,Curl的 --Data 项

curl -X PUT http://127.0.0.1:5217/rest/atop/?where=p_id=800 --data {\"f_dm\":\"800\"}

Response返回: 结果用JSON, 内容包括被更新后的结果集,更新影响的总行数。

{"Request":{
   "Content-Type": "application/x-www-form-urlencoded",
   "Data": {
      "f_dm": "800"
   },
   "Host": "127.0.0.1:5217",
   "Method": "PUT",
   "OrderBy": "",
   "Path": "/rest/atop/",
   "RESTorSQL": "REST",
   "ResName": "atop",
   "Where": "p_id=800"
},
"Response":{"Data":{
   "f_dm": "800"
},"Row":{"Update rowsAffected":1}}}

2.4 DELETE

Request请求:
url资源后面可以加查询子句,where= 定位要更新的资源集。

curl -X DELETE http://127.0.0.1:5217/rest/atop/?where=p_id=800

Response返回: 结果用JSON, 内容包括被删除的结果集,删除影响的总行数。

{"Request":{
   "Content-Type": "",
   "Data": "",
   "Host": "127.0.0.1:5217",
   "Method": "DELETE",
   "OrderBy": "",
   "Path": "/rest/atop/",
   "RESTorSQL": "REST",
   "ResName": "atop",
   "Where": "p_id=800"
},
"Response":{
   "Delete rowsAffected": 1
}}

3 URL直接执行SQL设计

URL栏可以直接输入SQL并执行,只支持SELECT,INSERT,UPDATE,DELETE

示例:

Request请求:

http://127.0.0.1:5217/sql/select * from atop
http://127.0.0.1:5217/sql/insert into atop (p_id) values(5217)
http://127.0.0.1:5217/sql/update atop set s_mc = '白龙马'
http://127.0.0.1:5217/sql/delete  from atop where p_id = 5217

Response返回结果:

{"Request":{
   "Content-Type": "",
   "Data": "",
   "Host": "127.0.0.1:5217",
   "Method": "GET",
   "OrderBy": "",
   "Path": "/sql/select * from atop",
   "RESTorSQL": "SQL",
   "ResName": "select * from atop",
   "Where": ""
},
"Response":[
   {
      "F_DM": "005217",
      "N_BS": null,
      "N_LJ": null,
      "N_SJ": null,
      "P_ID": -5217,
      "S_CYM": null,
      "S_DP": null,
      "S_MC": "白龙马"
   }]}

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

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

相关文章

SpringCloud(H版alibaba)框架开发教程,使用eureka,zookeeper,consul,nacos做注册中心——附源码(1)

源码地址:https://gitee.com/jackXUYY/springboot-example 创建订单服务,支付服务,公共api服务(共用的实体),eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.…

医院安全(不良)事件报告系统源码 支持二次开发、支持源码交付

医疗不良事件报告系统源码旨在建立全面的、统一的医疗不良事件标准分类系统和患者安全术语,使不良事件上报管理更加标准化和科学化。通过借鉴国内外医疗不良事件报告系统的先进经验,根据医疗不良事件的事件类型、处理事件的不同部门,灵活设置…

探索小红书笔记API:挖掘数据背后的故事

随着数字化时代的到来,数据已经成为企业和个人决策的重要依据。小红书作为一个流行的社交电商平台,积累了大量的用户数据和内容。通过探索小红书笔记API,我们可以深入挖掘这些数据背后的故事,从而更好地理解用户需求和市场趋势。 …

用C语言函数求x^y-------(C每日一编程)

编写函数,计算x^y&#xff08;x,y都是整数&#xff09;。 参考代码&#xff1a; int fun(int x, int y) {int k 1, i;for (i 1; i < y; i)k k * x;return k; } int main() {int x, y;scanf("%d%d", &x, &y);printf("%d", fun(x, y));retur…

文献阅读:LoRA: Low-Rank Adaptation of Large Language Models

文献阅读&#xff1a;LoRA: Low-Rank Adaptation of Large Language Models 1. 文章简介2. 方法介绍3. 实验 & 结论 1. 基础实验 1. Bert系列模型2. GPT系列模型 2. 消解实验 1. 作用矩阵考察2. 中间维度考察3. 扰动程度分析 4. 总结 & 思考 文献链接&#xff1a;htt…

Python中使用Matplotlib绘制圆环图

更多Python学习内容&#xff1a;ipengtao.com Matplotlib是Python中一个非常强大的库&#xff0c;它可以创建各种类型的图表&#xff0c;包括圆环图。圆环图是一种用于显示不同部分的相对比例的图表&#xff0c;通常用于呈现百分比或比例数据。在本文中&#xff0c;将深入探讨如…

FreeRTOS列表与列表项相关知识总结以及列表项的插入与删除实战

1.列表与列表项概念及结构体介绍 1.1列表项简介 列表相当于链表&#xff0c;列表项相当于节点&#xff0c;FreeRTOS 中的列表是一个双向环形链表 1.2 列表、列表项、迷你列表项结构体 1&#xff09;列表结构体 typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VAL…

我的 2023 年终总结

时间太瘦&#xff0c;指缝太宽&#xff0c;岁月就这样匆匆流逝&#xff0c;似乎年初许愿时的憧憬还在眼前&#xff0c;转瞬就到了年尾&#xff0c;对2023年做个简单的回顾吧 我的 2022 年终总结 我的 2019 年终总结 总结2022年展望2023年 2023年的目标 参与晋升&#xff0c;希望…

机器学习、人工智能、深度学习的关系

人工智能(Artificial Intelligence&#xff0c;AI) 人工智能范围很广&#xff0c;它是一门新的科学与工程&#xff0c;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术科学&#xff0c;研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和…

ssm基于冲突动态监测算法的健身房预约系统的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装健身房预约系统软件来发挥其高效地信息处理的作用&#xff…

【哈希数组】697. 数组的度

697. 数组的度 解题思路 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值遍历indexmap 将所有的list的长度 和 索引的差值存储遍历map1 找到最大的key 那么这个Ke…

MySQL:子查询

子查询 子查询是嵌套在较大查询中的 SQL 查询&#xff0c;也称内部查询或内部选择&#xff0c;包含子查询的语句也称为外部查询或外部选择。简单来说&#xff0c;子查询就是指将一个 select 查询&#xff08;子查询&#xff09;的结果作为另一个 SQL 语句&#xff08;主查询&a…

C# 如何使用?、? 和 ??的区别和使用案例

目录 ? 运算符 使用案例 ?? 运算符 使用案例 总结 在 C# 中&#xff0c;? 和 ?? 运算符在处理 null 值时起着不同的作用&#xff0c;并且具有特定的使用场景。 ? 运算符 ? 运算符&#xff0c;也称为空条件运算符&#xff0c;在 C# 6.0 及更高版本中引入。它允许…

C语言实例_生成6位数的随机密码

一、前言 随着数字化时代的到来&#xff0c;人们在各个方面需要使用密码来保护个人隐私和敏感信息的安全。为了确保密码的安全性&#xff0c;密码应该是足够强大和难以猜测的&#xff0c;这就需要密码生成器来帮助用户生成高强度的随机密码。 随机密码生成器是一种计算机程序…

界面控件DevExpress v23.2全新发布 - 全新升级的UI本地化API

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布&#xff0c;该版本拥有众多…

给idea添加右键打开功能

添加文件夹右键程序打开 开始运行regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 1、右键shell目录新建项Idea 2、右键Idea新建command 3、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 4、选择command 默认项填入idea的运行…

kubeadm来搭建k8s集群。

我们采用了二进制包搭建出的k8s集群&#xff0c;本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群&#xff0c;kubeadm更适合中小型企业的集群搭建 主机配置建议&#xff1a;2c 4G 主机节点 IP …

[年终总结]人生就是大闹一场

讲真的,感觉过去这一年的体验,非常精彩,哈哈哈哈 体验了 裸辞,并没有想象中那么可怕,也没有想象中那么焦虑 经历了 入职之后又被裁员,心情没有那么大的起伏 解锁了 深圳/佛山/珠海/澳门/昆明/大理/新疆/成都 ,见了很多人,碰撞出了很多 idea 体会了 没有目的的去做一件事情,是什…

20231231_小米音箱接入chatgpt

参考资料&#xff1a; GitHub - yihong0618/xiaogpt: Play ChatGPT and other LLM with Xiaomi AI Speaker 小爱音箱ChatGPT的折腾记录&#xff1a;win平台部署并运行成功_哔哩哔哩_bilibili GitHub - chatanywhere/GPT_API_free: Free ChatGPT API Key&#xff0c;免费Chat…

Unity Window安装包制作

Unity Window安装包制作 介绍一、RAR自解压方式1、找到Unity打包的可执行程序2.创建自解压文件3.配置设置4、最后点击确定等待压缩完成即可&#xff08;默认生成位置为你选中文件右键点击添加到压缩文件时的路径&#xff09; 二、Setup Factory工具安装制作Window安装包相关常用…