【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.mfbz.cn/a/281471.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CLion Nova:全新的C/C++ IDE

CLion Nova是一款备受期待的集成开发环境(IDE),由JetBrains专门为C/C开发者设计。这款IDE提供了许多新的功能和改进,使用 ReSharper C/Rider C 语言引擎而不是 CLion “传统” 引擎,以满足C/C开发者的需求。目前预览版…

全球电商平台API数据稳定接入

API是什么? API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。”比如:电脑需要调用手机里面的信息,这时候你会拿一根数据线将电脑手机连接起来,电脑和手机上连接数据…

迪杰斯特拉(Dijkstra)算法详解

【专栏】数据结构复习之路 这篇文章来自上述专栏中的一篇文章的节选: 【数据结构复习之路】图(严蔚敏版)两万余字&超详细讲解 想了解更多图论的知识,可以去看看本专栏 Dijkstra 算法讲解: 迪杰斯特拉算法(Di…

ASM-HEMT射频建模

关于ASM-HEMT RF模型 ASM-HEMT是指用于氮化镓高迁移率电子晶体管的先进SPICE模型。该模型于2018年由紧凑模型委员会(CMC)进行了标准化。 ASM-HEMT模型涵盖了氮化镓器件在射频(RF)和功率电子应用中的应用。模型手册提供了模型方程…

Win10 + 4090显卡配置深度学习环境 + gaussian-splatting配置 + 实测自己的场景

目录 1 安装Anaconda 2023.09版本 2 安装CUDA11.8 3 安装深度学习库Cudnn8.6.0 4 安装VSCODE2019 5 安装Colmap3.8 6 安装git 7 安装Python3.10 Pytorch2.0.0 7 安装项目 8 采集数据 8.1 IPhone 14 pro 拍摄30张照片左右 做预处理 8.2 生成colmap位姿等信息 8.3 开…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡(目标地址和端口交换)…

【数据结构和算法】找出两数组的不同

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 哈希类算法题注意事项 2.2 方法一:哈希法 三、代码 3.1 方法一:哈希法 四…

2023.12.30 Pandas操作

目录 1. pandas基础 1.1 pandas的基本介绍 1.2 pandas基础使用 2. pandas的数据结构 2.1 series对象 2.2 使用列表,自定义索引,字典,元组方式创建series对象 2.3 Series对象常用API 2.4 Series 对象的运算 1. pandas基础 1.1 pandas的基本介绍 Python在数据处理上独步天下…

ES6语法(五)封装模块化公共工具函数、引入npm包 ,并上传到npm中进行下载

1. 模块化 模块化是指将一个大的程序文件,拆分为许多小的文件(模块),然后将小的文件组合起来。 1.1. 优点 (1)防止命名冲突 (2)代码复用 (3)高维护性 &…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…

啊哈c语言——4.10、for隆重登场(一起来找茬)

下面这段代码是求12345678910的值。其中有4个错误&#xff0c; 快来改正吧&#xff01; 改正后&#xff1a; #include <stdio.h> #include <stdlib.h> int main( ) {int i, sum;sum1;for(i1; i<10;i){sumsum*i;}printf("%d", sum);system("paus…

[C#]OpenCvSharp实现Yolov8 Face Landmarks 人脸关键点检测

介绍&#xff1a; github地址&#xff1a;https://github.com/derronqi/yolov8-face 效果&#xff1a; 项目&#xff1a; 代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; u…

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

Python+Django+Mysql+SimpleUI搭建后端用户管理系统(非常详细,每一步都清晰,列举了里面所有使用的方法属性)

一、在Anaconda环境下创建虚拟环境 &#xff08;1&#xff09;打开Anaconda Prompt(install)&#xff0c;创建虚拟环境&#xff0c;如下图所示&#xff1a; 方法一&#xff1a;默认情况下虚拟环境创建在Anaconda安装目录下的envs文件夹中 conda create --name usermanage …

轻松删除文件名中的符号,使用替换功能,让管理文件更加得心应手!

在我们的日常生活和工作中&#xff0c;文件管理是一项必不可少的任务。而一个整洁、有序的文件名系统则有助于我们快速找到所需的文件。如果你发现文件名中存在一些不必要的符号&#xff0c;那么这款文件重命名工具将是你的得力助手。它具备强大的替换功能&#xff0c;可以轻松…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(三)

Matplotlib绘图技巧&#xff08;三&#xff09; 写在前面7. 雷达图7.1 圆形雷达图7.2 多边形雷达图 8. 极坐标图 subplot9. 折线图 plot10. 灰度图 meshgrid11. 热力图11.1 自定义colormap 12. 箱线图 boxplot 写在前面 终于更新完Matplotlib绘图技巧的全部内容&#xff0c;有…

Vue2【插槽】

目录 1&#xff1a;插槽-默认插槽&#xff1a; 2&#xff1a;插槽-具名插槽 &#xff1a; 3&#xff1a;插槽-作用域插槽&#xff1a; 总结&#xff1a;2023再见&#xff0c;2024再见&#xff01;&#xff01;&#xff01; 1&#xff1a;插槽-默认插槽&#xff1a; 作用&a…

游戏服务器安全需要注意什么方面需要搭配什么防护策略

服务器主机安全需要注意什么方面,首先需要知道服务器安全威胁有哪些 服务器安全威胁是指可能导致服务器遭受攻击、数据泄露或服务中断的各种风险和威胁。以下是一些常见的服务器安全威胁&#xff1a; 1. 恶意软件和病毒&#xff1a;服务器可能感染恶意软件、病毒或蠕虫&#…

pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字

导语 pygame是一个跨平台Python库(pygame news)&#xff0c;专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生&#xff0c;提供图像模块&#xff08;image&#xff09;、声音模块&#xff08;mixer&#xff09;、输入/输出&#xff08;鼠标、键盘、显示屏&#xff09;…

labuladong日常刷题-前缀和数组 | LeetCode 303区域和检索-数组不可变 304二维区域和检索-矩阵不可变 | 差分数组 1094拼车

前缀和数组—动态规划的一种 LeetCode 303 区域和检索-数组不可变 2023.12.30 题目链接labuladong讲解[链接] class NumArray { public:NumArray(vector<int>& nums) {//num nums; //暴力求解//简单动态规划dp.resize(nums.size());dp[0] nums[0];for(int i 1…
最新文章