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

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主要被用在描述软件系统中数据库或者持久层的基本操作功能。
| – | CRUD | SQL | REST |
|---|---|---|---|
| 创建、插入 | Create | Insert | Post |
| 读取、查询 | Read | Select | Get |
| 更新 | Update | Update | Put |
| 删除 | Delete | Delete | Delete |
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": "白龙马"}]}
相关文章:
【REST2SQL】01RDB关系型数据库REST初设计
0 概念 REST2SQL实现连接数据库,数据库的表或视图即可提供REST的GET\POST\PUT\DELETE请求,SQL可执行SQLECT\INSERT\UPDATE\DELETE语句。 0.1 RDB Relational Database 即关系型数据库(简称 RDB)是一种以关系(即表格…...
图像识别原理
图像识别是计算机视觉领域中的一个重要任务,其目标是使计算机系统能够理解和解释图像中的信息。以下是图像识别的基本原理: 1. 数据采集:首先,需要获取图像数据。这可以通过摄像头、传感器、扫描仪等设备来实现。图像可以是静态的…...
共识算法介绍
文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…...
Gen-AI 的知识图和分析(无需图数据库)
如今,图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命,工程师们正在考虑围绕 Gen-AI 的机会,利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案,这进一步促使他们思考知识图谱等有效的解决方案。…...
flutter 安卓使用高德插件黑屏
地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk,也就是需要手动下载到本地在引入的方式 1、添加 jar 文件: 将下载的地图 SDK 的 jar包复制到工程(此处截…...
Java:表单生成excel文档 poi 通用
在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 自动对生成…...
使用Apache Commons SCXML实现状态机管理
第1章:引言 大家好,我是小黑,咱们程序员在开发过程中,经常会遇到需要管理不同状态和状态之间转换的场景。比如,一个在线购物的订单,它可能有“新建订单”、“已支付”、“配送中”、“已完成”等状态。在这…...
大数据技术原理与应用期末考试题
大数据技术原理与应用期末考试题 一、单选题 1.下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能? A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理 B、利用分布式并行编程模型和计算框架,结合机器学习…...
解决jenkins的Exec command命令不生效,或者执行停不下来的问题
Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上,在服务器上执行脚本时,脚本中的 nohup 命令无法执行,并不生效,我配置的Exec command命令是后台启动一个war包,并输出日志文件。 nohup java -jar /…...
【PHP】json_decode的第二个参数是什么意思
json_decode() 函数的第二个参数 $associative 是一个布尔值,用于控制 JSON 对象在 PHP 中的解码方式。当将其设置为 true 时,JSON 对象将被解码为关联数组;当设置为 false 时,JSON 对象将被解码为 stdClass 对象。默认值为 false…...
学生公寓安全用电管理系统应用案例
摘要:安全用电是学校公寓用电管理的首要任务,这就需要对一些恶性负载进行识别和控制,同时为了减少电工和后期管理人员的成本,引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…...
python实现简易的flask后端接口
先安装插件pip install flask 新建py脚本文件编码: # -*- coding: utf-8 -*- from flask import Flask from flask_cors import CORS # 跨域依赖,通过pip install flask-cors安装app Flask(__name__) cors CORS(app) # 跨域设置,这样设置…...
CSDN质量分批量查询
单个文章质量分查询地址(点击右边地址): CSDN质量分查询 创作者身份认证审核标准 优质创作者申请条件: 粉丝数在5000以上近30日(申请日算起)原创文章数不少于4篇原创博文总数不少于100篇垂直领域原创数量…...
【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)
本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC(…...
c语言结构体学习上篇
文章目录 前言一、结构体的声明1,什么叫结构体?2,结构体的类型3,结构体变量的创建和初始化4,结构体的类型5,结构体的初始化 二、结构体的访问1,结构体成员的点操作符访问2,结构体体成员的指针访问 前言 昨…...
Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题
最近使用bcc-tools的时候注意到,bcc-tools(eBPF相关软件)的使用版本和内核的版本紧密程度非常高。因为要使用内核的函数或者结构体,所以就必须版本一致是必须的,不然会出现下面的警告或者错误: WARNING: tcp_drop() kernel function not found or traceable. The kernel …...
AI:113-基于卷积神经网络的图像风格迁移
🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…...
15、Kubernetes核心技术 - 探针
目录 一、概述 二、探针类型 2.1、就绪探针(Readiness Probe) 2.2、存活探针(Liveness Probe) 三、探针探测方法 3.1、exec 3.2、httpGet 3.3、tcpSocket 四、探针配置项 五、探针使用 5.1、就绪探针(Readin…...
GTK4 环境配置
1 安装gtk4包裹: # sudo yum install gtk4 gtk4-devel gtk4-devel-docs devhelp glib2 glib2-devel glib2-doc 2 安装 glade 4 git clone https://github.com/ag-python/cambalache.git 记住 把软件目录 复制到 一个你不会移动删除的地方(千万别删除这个软件文件夹 因为运行…...
Yolov8部署——segmentation部署以及批量推理
Yolov8部署——segmentation部署以及批量推理 参考:在windows上部署Yolov8主要参考下面两个仓库,https://github.com/xunzixunzi/tensorrt-cpp-api和https://github.com/xunzixunzi/YOLOv8-TensorRT-CPP,代码说是适合批量处理,但是代码中是以…...
从昆虫飞行到机器人导航:碰撞容忍型Gimbal机器人的仿生设计哲学
1. 项目概述:从“硬闯”到“巧过”的机器人导航哲学 在机器人导航领域,我们似乎已经习惯了“感知-规划-行动”的经典范式。从激光雷达、深度相机到复杂的SLAM算法,工程师们投入海量资源,只为让机器人像人一样,优雅地识…...
mmdetection环境搭建避坑指南:从CUDA版本、pip源到Gitee镜像的全流程优化
MMDetection环境搭建全流程优化:从版本匹配到镜像加速的实战指南 在计算机视觉领域,OpenMMLab系列工具包已经成为许多研究者和开发者的首选。作为其中的核心检测库,MMDetection凭借其模块化设计和丰富的预训练模型,极大地简化了目…...
auto-rednote:自动化信息整理工具的设计原理与实战应用
1. 项目概述与核心价值 最近在整理个人笔记和知识库时,我遇到了一个几乎所有内容创作者和开发者都会头疼的问题:如何高效地将散落在各处的、格式不一的“红色笔记”(比如微信收藏、网页剪藏、临时备忘录)自动整理成结构化的、可检…...
Android MediaProjection实战:从权限适配到异常处理,构建Android Q+的稳定截屏录屏功能
1. 理解MediaProjection的核心机制 在Android Q及以上版本中,MediaProjection API是系统级截屏和录屏功能的唯一官方入口。与早期版本直接调用adb screencap或反射获取Surface不同,这套机制通过用户显式授权的方式实现隐私保护。我曾在多个项目中遇到过因…...
Tome:基于MCP协议的无代码AI桌面助手,轻松连接本地与云端模型
1. 项目概述:Tome,一个为普通人打造的魔法AI桌面应用 如果你对大型语言模型(LLM)和AI助手感兴趣,但又觉得那些命令行工具、复杂的API配置和JSON文件让人望而却步,那么Tome的出现,可能就是为你准…...
七、数据与存储
一、 数据库操作 1、QSqlDatabase 连接管理深度剖析 连接生命周期与内部机制 QSqlDatabase 的连接管理不走寻常路——它内部是一个全局静态哈希表,存储着所有命名连接。这带来了几个重要的设计约束: // QSqlDatabase 内部实现的核心数据结构(简化还原)// Qt 源码中通过 QH…...
基于STC89C51单片机的多波形信号发生器设计与Proteus仿真
基于STC89C51单片机的多波形信号发生器设计与Proteus仿真 摘 要 随着电子技术和集成电路的飞速发展,信号发生器作为电子测量领域的基础设备,其性能和智能化水平不断提升。本设计以STC89C51单片机为控制核心,设计了一款多波形信号发生器。系统…...
中小团队如何利用Taotoken统一管理多个项目的AI调用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小团队如何利用Taotoken统一管理多个项目的AI调用成本 对于同时推进多个AI应用开发项目的中小型技术团队而言,管理分…...
Quality Guardian MCP:为AI编程助手设计的实时代码质量聚合与基线管理工具
1. 项目概述:为AI编程助手打造的代码质量守门员如果你和我一样,日常重度依赖 Claude Code、Cursor 这类 AI 编程助手来写代码,那你肯定也遇到过这个头疼的问题:AI 助手确实能快速生成代码,但它对项目里已有的“技术债”…...
工业现场故障排查:从温度敏感故障到CMOS浮空输入根因分析
1. 项目概述:一个“脾气暴躁”的堆垛起重机 在工业现场,最让人头疼的往往不是那些彻底罢工的设备,而是那些“时好时坏”、“看心情工作”的间歇性故障。它们像幽灵一样,在你想复现问题时消失得无影无踪,等你一离开又悄…...
