APIJSON使用和搭建

本文介绍了APIJSON,一种用于自动化API开发的协议和ORM库,它简化了增删改查、查询和事务操作,提升开发效率,减少前后端沟通成本。教程涵盖了安装、数据库配置、表导入、查询语法和实战应用等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:
	
	@Override
	public 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;
	}
	@Override
	public 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;
	}
	@Override
	public 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;
	}
	@Override
	public 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通用文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值