news 2026/9/6 16:40:54

零代码打造全功能后端 API 的 JSON 传输协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零代码打造全功能后端 API 的 JSON 传输协议

APIJSON

APIJSON 是一个功能强大的 JSON 传输协议和 ORM 库,它允许前端(客户端)定制返回 JSON 的数据和结构,而后端无需编写任何代码即可提供 API 接口和文档。该项目由腾讯开源,已成为腾讯内部使用广泛的开源项目之一。

功能特性

对于前端

  • 灵活定制返回内容:可以指定需要返回的字段、表关联、过滤条件等,无需后端为每个需求单独开发接口
  • 减少请求次数:单次请求可以获取多个相关对象或数组,减少网络请求次数
  • 结构清晰易用:使用 JSON 格式,结构清晰,易于理解和调试

对于后端

  • 零代码开发:无需为每个表编写增删改查接口,只需配置数据库表和权限即可
  • 自动生成文档:接口文档自动生成,无需手动维护
  • 支持多种数据库:支持 MySQL、PostgreSQL、SQL Server、Oracle、DB2、TiDB、MariaDB 等多种数据库
  • 强大的查询能力:支持简单查询、统计、分组、排序、聚合、比较、筛选字段、字段别名等功能
  • 安全可靠:提供完整的权限控制和参数校验机制

安装指南

Maven 依赖

pom.xml中添加 JitPack 仓库和 APIJSON 依赖:

<repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository></repositories><dependency><groupId>com.github.Tencent</groupId><artifactId>APIJSON</artifactId><version>LATEST</version></dependency>

Gradle 依赖

在项目根目录build.gradle中添加:

allprojects { repositories { maven { url 'https://jitpack.io' } } }

在模块build.gradle中添加:

dependencies { implementation 'com.github.Tencent:APIJSON:latest' }

环境要求

  • JDK 1.8+
  • MySQL 5.7+ / PostgreSQL 9.5+ / Oracle 12C+ 或其他支持的数据库
  • Maven 3.0+ 或 Gradle

使用说明

基础查询示例

获取单个用户

请求:

{"User":{"id":38710}}

响应:

{"User":{"id":38710,"sex":0,"name":"TommyLemon","tag":"Android&Java","head":"http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000","date":1485948110000,"pictureList":["http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000","http://common.cnblogs.com/images/icon_weibo_24.png"]},"code":200,"msg":"success"}
获取用户列表

请求:

{"[]":{"count":3,"User":{"@column":"id,name"}}}

响应:

{"[]":[{"User":{"id":38710,"name":"TommyLemon"}},{"User":{"id":70793,"name":"Strong"}},{"User":{"id":82001,"name":"Android"}}],"code":200,"msg":"success"}

复杂查询示例

支持关联查询、分组、排序、聚合函数等复杂操作:

{"Moment":{"@column":"id,userId,content","id{}":">0","@order":"id-"},"User":{"@column":"id,name","id@":"/Moment/userId"}}

事务操作

一个 JSON 请求可以同时支持新增、修改、删除、查询等多种操作:

{"@post":"Moment,Comment:cArray[],User:u","Moment":{"content":"测试内容"},"Comment:cArray[]":[{"content":"评论1"}],"@get":"User","User:u":{"id":82001}}

核心代码

JSON 工具类

/*Copyright (C) 2020 Tencent. All rights reserved.*/packageapijson;importjava.util.Collection;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;/** * JSON工具类 防止解析时异常 * @author Lemon */publicclassJSON{staticfinalStringTAG="JSON";publicstaticJSONParser<?extendsMap<String,Object>,?extendsList<Object>>DEFAULT_JSON_PARSER;// 创建JSON对象publicstatic<MextendsMap<String,Object>>McreateJSONObject(){returnDEFAULT_JSON_PARSER.createJSONObject();}// 解析JSON字符串publicstaticMap<String,Object>parseObject(Objectjson){returnDEFAULT_JSON_PARSER.parseObject(json);}// 将对象转换为JSON字符串publicstaticStringtoJSONString(Objectobj){returnDEFAULT_JSON_PARSER.toJSONString(obj);}}

JSON 请求接口

/*Copyright (C) 2020 Tencent. All rights reserved.*/packageapijson;importjava.util.List;importjava.util.Map;/** * 请求JSON包装器 * @author Lemon */publicinterfaceJSONRequest<MextendsMap<String,Object>,LextendsList<Object>>extendsJSONMap<M,L>{publicstaticfinalStringKEY_TAG="tag";// 只在最外层publicstaticfinalStringKEY_VERSION="version";// 只在最外层publicstaticfinalStringKEY_FORMAT="format";// 只在最外层// 设置标签defaultJSONRequest<M,L>setTag(Stringtag){returnputs(KEY_TAG,tag);}// 设置版本defaultJSONRequest<M,L>setVersion(Integerversion){returnputs(KEY_VERSION,version);}// 设置格式defaultJSONRequest<M,L>setFormat(Booleanformat){returnputs(KEY_FORMAT,format);}}

SQL 配置类

/*Copyright (C) 2020 Tencent. All rights reserved.*/packageapijson.orm;importapijson.RequestMethod;importjava.util.List;importjava.util.Map;/** * SQL配置接口 * @author Lemon */publicinterfaceSQLConfig<T,MextendsMap<String,Object>,LextendsList<Object>>{// 支持的数据库类型StringDATABASE_MYSQL="MYSQL";StringDATABASE_POSTGRESQL="POSTGRESQL";StringDATABASE_SQLSERVER="SQLSERVER";StringDATABASE_ORACLE="ORACLE";StringDATABASE_DB2="DB2";// 获取表名StringgetTable();// 获取别名StringgetAlias();// 获取数据库类型StringgetDatabase();// 获取schemaStringgetSchema();// 获取请求方法RequestMethodgetMethod();// 设置请求方法SQLConfig<T,M,L>setMethod(RequestMethodmethod);}

解析器接口

/*Copyright (C) 2020 Tencent. All rights reserved.*/packageapijson.orm;importapijson.RequestMethod;importjava.util.List;importjava.util.Map;/** * 解析器接口 * @author Lemon */publicinterfaceParser<T,MextendsMap<String,Object>,LextendsList<Object>>{// 获取访问者Visitor<T>getVisitor();// 设置访问者Parser<T,M,L>setVisitor(Visitor<T>visitor);// 获取请求方法RequestMethodgetMethod();// 设置请求方法Parser<T,M,L>setMethod(RequestMethodmethod);// 解析请求MparseResponse(Mrequest);// 执行SQLMexecuteSQL(SQLConfig<T,M,L>config,booleanisSubquery)throwsException;}

远程函数解析器

/*Copyright (C) 2020 Tencent. All rights reserved.*/packageapijson.orm;importjava.util.List;importjava.util.Map;importapijson.JSONMap;/** * 远程函数解析器 * @author Lemon */publicinterfaceFunctionParser<T,MextendsMap<String,Object>,LextendsList<Object>>{// 调用函数Objectinvoke(Stringfunction,McurrentObject)throwsException;// 获取解析器Parser<T,M,L>getParser();// 设置解析器FunctionParser<T,M,L>setParser(Parser<T,M,L>parser);// 获取请求方法RequestMethodgetMethod();// 设置请求方法FunctionParser<T,M,L>setMethod(RequestMethodmethod);// 获取当前对象MgetCurrentObject();// 设置当前对象FunctionParser<T,M,L>setCurrentObject(McurrentObject);}

这些核心代码展示了 APIJSON 的核心架构,包括 JSON 解析、SQL 配置、请求处理和远程函数调用等功能模块。通过这些组件,APIJSON 能够实现无需编写代码即可提供完整 API 接口的功能。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 5:46:31

21、嵌入式系统文件系统选择与软件更新全解析

嵌入式系统文件系统选择与软件更新全解析 1. 文件系统选择 在嵌入式系统中,存储需求通常可分为以下三类: - 永久读写数据:如运行时配置、网络参数、密码、数据日志和用户数据。 - 永久只读数据:像程序、库和常量配置文件,例如根文件系统。 - 易失性数据:例如临时存储…

作者头像 李华
网站建设 2026/9/6 17:26:40

25、嵌入式设备硬件控制与驱动开发全解析

嵌入式设备硬件控制与驱动开发全解析 1. 发光二极管(LED)控制 LED 通常可通过 GPIO 引脚控制,但内核子系统能提供更专业的控制。以下是详细介绍: - 内核子系统控制优势 :LED 内核子系统可设置亮度(前提是 LED 支持),还能处理非简单 GPIO 引脚连接的 LED,可配置为…

作者头像 李华
网站建设 2026/9/7 4:44:07

29、Linux 系统的电源管理与进程线程机制解析

Linux 系统的电源管理与进程线程机制解析 1. CPUIdle 驱动 CPUIdle 与 CPUFreq 子系统类似,由属于 BSP 的驱动和决定策略的调节器组成。不过,与 CPUFreq 不同的是,CPUIdle 的调节器在运行时不能更改,且没有用户空间调节器的接口。 CPUIdle 在 /sys/devices/system/cpu/…

作者头像 李华
网站建设 2026/9/7 2:24:13

csp信奥赛C++标准模板库STL(7):unordered_map的使用详解

csp信奥赛C标准模板库STL&#xff08;7&#xff09;&#xff1a;unordered_map的使用详解 一、unordered_map 概述 unordered_map 是 C STL 中的关联容器&#xff0c;基于哈希表实现&#xff0c;提供 O(1) 平均时间复杂度的查找、插入和删除操作。 1.1 基本特性 底层结构&am…

作者头像 李华
网站建设 2026/9/7 6:08:22

EmotiVoice在影视后期配音流程中的效率提升验证

EmotiVoice在影视后期配音流程中的效率提升验证 在一部动画电影的最终剪辑阶段&#xff0c;导演发现主角的关键独白情绪表达不够强烈——原本应是悲愤交加的控诉&#xff0c;听起来却像平静陈述。重召配音演员&#xff1f;档期冲突&#xff1b;换人重录&#xff1f;音色不一致。…

作者头像 李华
网站建设 2026/9/7 12:50:45

Java Web 高校危化试剂仓储系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着高校科研活动的日益频繁&#xff0c;实验室危化试剂的使用和管理成为校园安全的重要课题。传统的手工记录和纸质管理方式存在效率低下、数据易丢失、追溯困难等问题&#xff0c;难以满足现代实验室对危化试剂仓储的高效化、规范化和安全化需求。为解决这一问题&#…

作者头像 李华