【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主要被用在描述软件系统中数据库或者持久层的基本操作功能。

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.mzph.cn/news/587746.shtml

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

相关文章

数据结构,题目笔记

哈希表 线性探测再散列 【算法数据结构|哈希查找|哈希冲突|除留余数法|线形探测法|例题讲解】https://www.bilibili.com/video/BV1514y1P7BK?vd_source1a684a3a1b9d05485b3d6277aeeb705d 【二次探测再散列法】 【【…

ESP32入门七(中断)

中断用于处理在程序正常执行期间通过外部事件或者响应软件指令触发时发生的事件。比如,在一段呼吸灯的代码中,正常运行时的结果为LED从暗到亮,再从亮到暗持续地运行。我们可以通过一个中断来控制呼吸灯的运行和停止。使用中断功能&#xff0c…

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split(mat)将图像的通道进行分割。 merge((ch1,ch2,ch3))将多个通道进行融合。 示例代码如下: import cv2 import numpy as npimg np.zeros((480, 640, 3),…

uni-app App.vue生命周期全局样式全局存储globalData

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Docker之网络配置

目录 1.网络概念 网络相关的有ip,子网掩码,网关,DNS,端口号 1.1 ip是什么? ip是唯一定位一台网上计算机 Ip地址的分类: IPV4: 4字节32位整数,并分成4段8位的二进制数,每8位之间用圆点隔开,每8位整数可以转换为一个0~255的十进制整数 【例…

windows server 2022 启用SYN攻击保护

2023.12.28 SYN攻击是什么: SYN攻击是黑客攻击的常用手段,也是最容易被利用的一种攻击手法,属于DDoS攻击的一种。它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。 SYN攻击包括大量TCP连接的第一个包&…

HTML5+CSS3②——图像、超链接、音频、视频

目录 图像 超链接 音频 视频 图像 作用&#xff1a;在网页中插入图片 单标签&#xff1a; 标签名&#xff1a;<img src"图片的URL"> <img src"图片的URL" alt"替换文本" title"提示文本"> 属性写在尖括号里面&#xff0c;…

【Redis-02】Redis数据结构与对象原理 -上篇

Redis本质上是一个数据结构服务器&#xff0c;使用C语言编写&#xff0c;是基于内存的一种数据结构存储系统&#xff0c;它可以用作数据库、缓存或者消息中间件。 我们经常使用的redis的数据结构有5种&#xff0c;分别是&#xff1a;string(字符串)、list(列表)、hash(哈希)、s…

多环境及SpringBoot项目部署

1、多环境 2、项目部署上线 原始前端 / 后端项目宝塔Linux容器容器平台 3、前后端联调 4、项目扩展和规划 多环境 程序员鱼皮-参考文章 本地开发&#xff1a;localhost&#xff08;127.0.0.1&#xff09; 多环境&#xff1a;指同一套项目代码在把不同的阶段需要根据实际…

将数据“0x0f“写入AT24C02再读出送P1口显示

#include <reg51.h> // 包含51单片机寄存器定义的头文件 #include <intrins.h> //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写入…

win10系统gpu本地部署chatglm3-6b,从0开始安装

开源地址&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 前言&#xff1a;ChatGLM2与ChatGLM3区别 ChatGLM2与ChatGLM3模型架构是完全一致的&#xff0c;ChatGLM与后继者结构不同。可见ChatGLM3相对于ChatGLM2没…

付费进群系统源码带定位完整独立版(12月30日)再次修复首发

搭建教程 nginx1.2 php5.6–7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;shujuku.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账号&…

ArkUI中自定义组件的生命周期

文章概叙 本文主要是介绍下在作为page以及component的时候的生命周期&#xff0c;以及调用API等应该在哪个生命周期使用。 书接上回 之前的博客已经结束了对底部栏的操作&#xff0c;现在开始需要关注到具体内容的对接了。 而开发的第一步&#xff0c;我们对页面的生命周期…

最后一次纪念在泰山OFFICE的日子,明年开源量子OFFICE

今天去泰山在无锡的办公地点&#xff0c;给门卫送了一点零食表示感谢。送了之后&#xff0c;我也没进去怀旧&#xff0c;然后就去附近的南山&#x26e50;礼佛求福。 2021年的最后一天&#xff0c;公司举办了迎新活动。看了恍如隔世。我怀念泰山OFFICE&#xff0c;是因为在这里…

上海周边公路骑行路线分享,维乐带你抓住秋天的小尾巴

路线一&#xff1a;松江郊里骑行      在魔都上海&#xff0c;藏着一条自然风景适宜&#xff0c;能眺望黄浦江的美丽骑行路线。导航到华长路杨家角就能到达起点&#xff0c;一路向西&#xff0c;这里路况非常好&#xff0c;只有一条小道&#xff0c;没有汽车的障碍&#xf…

25、WEB攻防——通用漏洞SQL读写注入MYSQLMSSQLPostgreSQL

文章目录 Mysql-root高权限读写注入PostgreSQL——dba高权限读写注入Mssql-sa高权限读写注入 Access无高权限注入点——只能猜解&#xff0c;而且是暴力猜解&#xff1b; MYSQL&#xff0c;PostgreSQL&#xff0c;MSSQL(SQL server)高权限注入点——可升级读写&#xff08;文件…

学习体系结构 - AArch64 异常模型

学习体系结构 - AArch64 异常模型 Learn the architecture - AArch64 Exception Model version 1.3 根据DeepL翻译 校准 1、Overview AArch64异常模型指南&#xff0c;介绍了Armv8-A和Armv9-A中的异常和特权模型。它涵盖了Arm架构中不同类型的异常以及处理器在处理异常时的行…

12/31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;用于密集预测的多路径视觉Transformer1、研究背景2、方法提出3、相关方法3.1、Vision Transformers for dense predictions3.2、C…

GAMES101:作业4记录

文章目录 总览算法编写代码&#xff1a;recursive_bezier()的实现Bezier()函数的实现提高部分&#xff1a;反走样 总览 Bzier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线 (当你正确实现该算法时,…

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…