当前位置: 首页 > news >正文

零代码打造全功能后端 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.*/
package apijson;import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;/*** JSON工具类 防止解析时异常* @author Lemon*/
public class JSON {static final String TAG = "JSON";public static JSONParser<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_PARSER;// 创建JSON对象public static <M extends Map<String, Object>> M createJSONObject() {return DEFAULT_JSON_PARSER.createJSONObject();}// 解析JSON字符串public static Map<String, Object> parseObject(Object json) {return DEFAULT_JSON_PARSER.parseObject(json);}// 将对象转换为JSON字符串public static String toJSONString(Object obj) {return DEFAULT_JSON_PARSER.toJSONString(obj);}
}

JSON 请求接口

/*Copyright (C) 2020 Tencent. All rights reserved.*/
package apijson;import java.util.List;
import java.util.Map;/*** 请求JSON包装器* @author Lemon*/
public interface JSONRequest<M extends Map<String, Object>, L extends List<Object>> extends JSONMap<M, L> {public static final String KEY_TAG = "tag";        // 只在最外层public static final String KEY_VERSION = "version"; // 只在最外层public static final String KEY_FORMAT = "format";   // 只在最外层// 设置标签default JSONRequest<M, L> setTag(String tag) {return puts(KEY_TAG, tag);}// 设置版本default JSONRequest<M, L> setVersion(Integer version) {return puts(KEY_VERSION, version);}// 设置格式default JSONRequest<M, L> setFormat(Boolean format) {return puts(KEY_FORMAT, format);}
}

SQL 配置类

/*Copyright (C) 2020 Tencent. All rights reserved.*/
package apijson.orm;import apijson.RequestMethod;
import java.util.List;
import java.util.Map;/*** SQL配置接口* @author Lemon*/
public interface SQLConfig<T, M extends Map<String, Object>, L extends List<Object>> {// 支持的数据库类型String DATABASE_MYSQL = "MYSQL";String DATABASE_POSTGRESQL = "POSTGRESQL";String DATABASE_SQLSERVER = "SQLSERVER";String DATABASE_ORACLE = "ORACLE";String DATABASE_DB2 = "DB2";// 获取表名String getTable();// 获取别名String getAlias();// 获取数据库类型String getDatabase();// 获取schemaString getSchema();// 获取请求方法RequestMethod getMethod();// 设置请求方法SQLConfig<T, M, L> setMethod(RequestMethod method);
}

解析器接口

/*Copyright (C) 2020 Tencent. All rights reserved.*/
package apijson.orm;import apijson.RequestMethod;
import java.util.List;
import java.util.Map;/*** 解析器接口* @author Lemon*/
public interface Parser<T, M extends Map<String, Object>, L extends List<Object>> {// 获取访问者Visitor<T> getVisitor();// 设置访问者Parser<T, M, L> setVisitor(Visitor<T> visitor);// 获取请求方法RequestMethod getMethod();// 设置请求方法Parser<T, M, L> setMethod(RequestMethod method);// 解析请求M parseResponse(M request);// 执行SQLM executeSQL(SQLConfig<T, M, L> config, boolean isSubquery) throws Exception;
}

远程函数解析器

/*Copyright (C) 2020 Tencent. All rights reserved.*/
package apijson.orm;import java.util.List;
import java.util.Map;
import apijson.JSONMap;/*** 远程函数解析器* @author Lemon*/
public interface FunctionParser<T, M extends Map<String, Object>, L extends List<Object>> {// 调用函数Object invoke(String function, M currentObject) throws Exception;// 获取解析器Parser<T, M, L> getParser();// 设置解析器FunctionParser<T, M, L> setParser(Parser<T, M, L> parser);// 获取请求方法RequestMethod getMethod();// 设置请求方法FunctionParser<T, M, L> setMethod(RequestMethod method);// 获取当前对象M getCurrentObject();// 设置当前对象FunctionParser<T, M, L> setCurrentObject(M currentObject);
}

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

公众号二维码

公众号二维码

http://www.jsqmd.com/news/103572/

相关文章:

  • 如何在低延迟场景下优化EmotiVoice语音输出?
  • 语音合成安全边界:防止EmotiVoice被滥用的技术措施
  • 2025年下半年如何选择重庆土工布品牌?前十推荐 - 2025年品牌推荐榜
  • GPU算力租赁广告:专为EmotiVoice优化的云服务器套餐
  • 2025年重庆土工布品牌口碑排行 - 2025年品牌推荐榜
  • 情感语音合成标准制定参与:推动行业规范化发展
  • 支持中文多情感表达的TTS开源模型——EmotiVoice评测
  • VirtualMonitor虚拟显示器:5分钟零成本扩展你的工作空间
  • EmotiVoice情感库扩展方法:自定义情绪类型教程
  • 告别JMeter! 小白也能轻松实现性能压测/监控
  • EmotiVoice在广播剧制作中的效率提升实测
  • autofit.js大屏自适应终极方案:一键配置实现完美布局
  • 35倍推理加速优化指南:GPT-SoVITS优化实战全解析
  • EmotiVoice语音语调自动校正功能设想
  • 语音合成服务计费模型设计:按token还是按时长?
  • EmotiVoice能否生成带有方言俚语特色的口语化语音?
  • 2025年质量好的芜湖短视频运营拍摄实力机构榜 - 行业平台推荐
  • EmotiVoice语音韵律词典构建方法研究
  • 3分钟掌握Koodo Reader封面美化:让你的电子书库焕然一新
  • 如何用EmotiVoice生成新闻播报风格语音?
  • EmotiVoice是否需要联网使用?本地化运行实测
  • EmotiVoice能否生成带有地方戏曲元素的语音?
  • 低资源环境运行建议:CPU模式下的性能预期
  • EmotiVoice语音合成失败常见原因排查手册
  • EmotiVoice在语音日记App中的个性化应用
  • EmotiVoice镜像预装服务:一键部署免去环境配置烦恼
  • 深入解析:【微服务】微服务架构演进
  • 2025年靠谱的短视频运营用户评价排行榜 - 行业平台推荐
  • 2025年下半年重庆土工膜怎么选?前十推荐 - 2025年品牌推荐榜
  • 2025年12月山东枣庄跳汰机品牌实力对比 - 2025年品牌推荐榜