APIJSON使用和搭建

  • APIJSON的介绍
    • 这是什么
    • 这有什么用
    • 对我们的项目好处有哪些
    • 功能流程图
  • 项目的搭建
    • 安装&使用
    • 修改数据库链接
    • 导入表
  • 语法的使用
    • 基本查询
    • 关联查询
    • 分组查询
  • 最后总结

APIJSON的介绍

这是什么

APIJSON是一种专为API而生的 JSON网络传输协议 以及 基于这套协议实现的ORM库

这有什么用

为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。

对我们的项目好处有哪些

通过自动化API,前端可以定制任何数据、任何结构!
大部分HTTP请求后端再也不用写接口了,更不用写文档了!
前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了

功能流程图

一般Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程

部署上这个项目后,流程变成了这样


使用这个项目作为后端的支持的话,是不需要对每个表写增删改查等接口的,只需在该项目连接的数据里进行表的创建,以及配置接口权限即可。无需进行过多的开发,哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目,现在需要些的接口就基本写好了,直接调用就行了,是不是挺爽的。

项目的搭建

安装&使用

  1. 配置开发环境 推荐使用: JDK: 1.8 , Maven: 3.0+ , Mysql
  2. 下载Demo项目: git clone https://gitee.com/APIJSON/APIJSON-Demo.git

修改数据库链接

如我的数据库信息是这样的

数据库参数
地址 localhost:3306
用户 root
密码 root
数据库 system

改为自己数据库对应的链接

 DEFAULT_DATABASE = DATABASE_MYSQL;  //TODO 默认数据库类型,改成你自己的。TiDB, MariaDB, OceanBase 这类兼容 MySQL 的可当做 MySQL 使用DEFAULT_SCHEMA = "security";  //TODO 默认模式名,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:@Overridepublic String getDBVersion() {if (isMySQL()) {return "5.7.23"; //"8.0.11"; //TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 //MYSQL 8 和 7 使用的 JDBC 配置不一样}if (isPostgreSQL()) {return "9.6.15"; //TODO 改成你自己的}if (isSQLServer()) {return "2016"; //TODO 改成你自己的}if (isOracle()) {return "18c"; //TODO 改成你自己的}if (isDb2()) {return "11.5"; //TODO 改成你自己的}return null;}@Overridepublic String getDBUri() {if (isMySQL()) {// 这个是 MySQL 8.0 及以上,要加 userSSL=false  return "jdbc:mysql://localhost:3306?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";// 以下是 MySQL 5.7 及以下return "jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000}if (isPostgreSQL()) {return "jdbc:postgresql://localhost:5432/postgres"; //TODO 改成你自己的}if (isSQLServer()) {return "jdbc:jtds:sqlserver://localhost:1433/pubs;instance=SQLEXPRESS"; //TODO 改成你自己的}if (isOracle()) {return "jdbc:oracle:thin:@localhost:1521:orcl"; //TODO 改成你自己的}if (isDb2()) {return "jdbc:db2://localhost:50000/BLUDB"; //TODO 改成你自己的}return null;}@Overridepublic String getDBAccount() {if (isMySQL()) {return "root";  //TODO 改成你自己的}if (isPostgreSQL()) {return "root";  //TODO 改成你自己的}if (isSQLServer()) {return "root";  //TODO 改成你自己的}if (isOracle()) {return "root";  //TODO 改成你自己的}if (isDb2()) {return "root"; //TODO 改成你自己的}return null;}@Overridepublic String getDBPassword() {if (isMySQL()) {return "root";  //TODO 改成你自己的,TiDB 可以当成 MySQL 使用, 默认密码为空字符串 ""}if (isPostgreSQL()) {return null;  //TODO 改成你自己的}if (isSQLServer()) {return "root";  //TODO 改成你自己的}if (isOracle()) {return "root";  //TODO 改成你自己的}if (isDb2()) {return "root"; //TODO 改成你自己的}return null;}

导入表

在APIJSON-Demo/MySQL目录下有一批SQL脚本,他们看起来是这样的

导入完成之后。我们可以把项目跑起来看下,以刚刚配置的项目,项目是否能够连上数据库。其中也有一些初始化数据,可以方便我们测试。
|

语法的使用

基本查询

对接口地址http://localhost:8080/get发送一个JSON格式的请求,查询参数如下

//查询Moment表里面的,ID为12的数据
{"Moment" : {"id" : 12}
}//查询Moment表里面的,ID为12,只返回content列数据
//@column表示你要筛选出的字段,如果是多个字段可以这样写"@column":"id,date,content"
{"Moment": {"id":12,"@column":"content"}
}//同时筛选出,ID在12,15,32中的这三条数据的日期和内容
{"[]": {"Moment":{"id{}":[12,15,32],"@column":"id,date,content"}}
}//筛选ID是10到40之间的, 同时不包含12的数据
{"[]": {"Moment":{"id&{}":">=10,<=40","id!{}":[12],"@column":"id,date,content:text"}}
}//模糊查询content里面包含APIJSON的值
{"[]": {"Moment":{"content$":"%APIJSON%","@column":"id,date,content:text"}}
}//正则表达式^[0-9]+$,查询content为纯数字的数据
{"[]": {"Moment":{"content~":"^[0-9]+$","@column":"id,date,content:text"}}
}//过滤praiseUserIdList里面有82001的JSON数组数据,我们应该这样请求
{"[]": {"Moment":{"praiseUserIdList<>":82001,"@column":"id,date,content,praiseUserIdList"}}
}//数量太多的数据,我们很多时候都需要分页操作,这时候我们可以用类似下面这样的请求
{"[]": {"Moment":{"@column":"id,date,content,praiseUserIdList"},"page": 0,"count": 5}
}//要使用排序的话,这样操作
//"@order":"date-,id,content+"其中,字段的前后顺序表示字段排序的优先级。id和id+是等价的,默认就是升序排列。date-表示将date字段降序排列。
{"[]": {"Moment":{"@column":"id,date,content,praiseUserIdList","praiseUserIdList<>":38710,"@order":"date-,id,content+"}}
}

关联查询

现在有两张表USER和MOMENT,两张表的关系是下面这样

可以这样写

{"[]": {"Moment":{"@column":"id,date,userId","id":12},"User":{"id@":"/Moment/userId","@column":"id,name"}}
}

User是与Moment相关联的数据,所以查询的时候我们需要用id@来表示他们之间的关联关系

/Moment/userId中,最开始的/相当于是指明了[]的位置,/Moment表示[]对象下的Moemnt对象,/Moment/userId表示Moemnt的userId字段是与User的id关联的。这是一种缺省引用路径,这里等价于完整引用路径 []/Moment/userId。

分组查询

我们需要先了解下APIJSON所支持的函数

函数名 说明
count 统计分组下,某字段的个数
sum 统计分组下,某字段的和
max 统计分组下,某字段的最大值
min 统计分组下,某字段的最小值
avg 统计分组下,某字段的平均值
//查询单纯的查出最大值,这样请求就可以了
//这里maxid是我们取的别名
{"Moment":{"@column":"max(id):maxid"}
}//我们想要计算出这天每个店铺一共卖了多少,我们通过APIJSON可以这样查询
//如果是有分组条件的,那我们需要使用@group
{"[]": {"Sale":{"@column":"store_id,sum(amt):totAmt","@group":"store_id"}}
}

最后总结

APIJSON帮助了我们后端简化了很多步骤,让我们开发效率可以大幅增加,需要什么就拿什么,也可以让前端也参与进来一起编程。
关于使用的性能,安全这里我觉还是需要留意一下的。

上面的语法只是列出了一下比较常用的查询方法,有兴趣的小伙伴可以去 这里找找看 APIJSON通用文档

APIJSON使用和搭建相关推荐

  1. Tencent APIJSON 零代码、全功能、强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构

    项目介绍 零代码.全功能.强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构. A JSON Transmission Protocol and an ORM ...

  2. APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置

    文章目录 一.项目导入 二.数据库搭建及配置 三.运行项目并访问接口 四.apijson语法 1.查询 2.插入数据 3.修改数据 4.删除数据 5.登录 五.如何新增接口 六.大坑 1.id 最近因 ...

  3. APIJSON 自动化接口和文档的快速开发神器

    认识APIJSON APIJSON是一种JSON传输结构协议.客户端可以定义任何JSON结构去向服务端发起请求,服务端就会返回对应结构的JSON字符串,所求即所得.一次请求任意结构任意数据,方便灵活, ...

  4. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  5. 使用Docker搭建svn服务器教程

    使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很 ...

  6. hexo-github-博客搭建指南

    经过一天的折腾,总算是把博客搭建好了,在这里记录下搭建博客过程中参考的资料.搭建这个博客的主要目的是记录自己的学习.成长过程,而是否有人看,又有多少人看对我来说不是重点. 搭建博客过程重要参考以下几个 ...

  7. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  8. Windows10+Anaconda3+Pycharm环境搭建

    Windows10+Anaconda3+Pycharm环境搭建 一.安装Anaconda3 1.进入 anconda官网,下载Anaconda3 2.安装,选项默认继续安装(可以自行更改安装位置),等 ...

  9. centos7httpd服务的搭建

    ---------------------------------------httpd搭建--------------------------------------------- yum inst ...

最新文章

  1. linux lua ide,mac os上开发lua用什么ide
  2. System x迈向更多领域 国内超算步入全面发展时代
  3. C和C++中的野指针问题
  4. 华为odc是什么意思_华为不造车!但任正非加了一个有效期,3年
  5. css之文本溢出处理 | 背景图片处理
  6. 王思聪花了100万的组装的电脑,网速到底有多快?
  7. rom lg g2 f320d android 4.4.2,LG G2(F320K/S/L/D8001/D802)官方KDZ刷机教程
  8. android gridview 详解,Android开发 GridView详解
  9. 线性代数 第四章 线性方程组 知识点总结(Jeff自我感悟)
  10. LaTex 常用的数学字体
  11. 在苹果Mac上如何恢复已删除的用户?
  12. App/QoE-Based Congestion control
  13. OpenGL3.3-SSAO
  14. css_使div中的文本自动换行
  15. VB文本框textbox的那点事
  16. 2019百度搜索风云榜公布:元尊、圣墟、逆天邪神位列前三名
  17. 清华大学计算机系哪个专业就业前景最好,清华大学有哪些专业最好就业?很多人都不知道!...
  18. 2020nyist第三场个人赛
  19. 说说如何在 Excel 中构建类似 Microsoft Project 中的任务层级结构
  20. C++3.4数据结构之队列基础+blah数集题解

热门文章

  1. AXI_BRAM和AXI_Stream FIFO的通信
  2. 使用BRAM进行位宽转换
  3. 微信开发,分享部分出现的问题
  4. 无用代码去哪了?项目减重之 rollup 的 Tree shaking
  5. Ubuntu 16.04 使用docker资料汇总与应用docker安装caffe并使用Classifier(ros kinetic+usb_cam+caffe)
  6. JS原生 未来元素监听写法
  7. Ubuntu 关闭软件更新通知及自动更新
  8. 基于Django框架的网络云盘设计
  9. 解决域名被劫持的方案?
  10. java ftp 设置编码_java ftp上传下载,下载文件编码设置