【开源】APIJSON 框架

9,364次阅读
没有评论

共计 7213 个字符,预计需要花费 19 分钟才能阅读完成。

简述

APIJSON 是一个关于 API 和 JSON 的综合技术或框架,一种专为 API 设计的 JSON 网络传输协议,以及基于这套协议实现的 ORM 库。

1. 定义与特点:

  • APIJSON 是一种基于接口的 JSON 传输结构协议,它允许客户端定义任何 JSON 结构来向服务端发起请求,服务端则返回对应结构的 JSON 字符串,实现“所求即所得”的效果。
  • 它为简单的增删改查提供了完全自动化的万能 API,能够零代码实时满足各种新增和变更需求。
  • 通过 APIJSON,可以大幅降低开发和沟通成本,简化开发流程,缩短开发周期。

2. 主要作用:

  • APIJSON 的主要作用在于简化客户端和服务端之间的数据交换过程,使得前后端开发者能够更加高效地协同工作。
  • 它支持多种编程语言和平台,包括 JavaScript、Python、Java、C# 等,因此具有广泛的应用价值。

3. 使用场景:

  • APIJSON 特别适用于中小公司、团队及个人开发者,解决他们在客户端和服务端之间数据交换的问题。
  • 它被广泛应用于 Web 开发、移动应用开发、桌面应用开发等领域。

4. 基本用法:

  • 定义 API 接口:使用类似 JSON 的格式来定义 API 接口,包括 URL、请求方法、参数、返回结果等信息。
  • 发送请求:使用 HTTP 客户端工具(如 Postman)或编程语言中的 HTTP 请求库来发送请求。
  • 解析返回结果:APIJSON 服务端会返回符合定义的 JSON 格式的数据作为响应,开发者可以解析和处理返回的数据。

5. 优势:

  • 结构清晰:APIJSON 的层次结构简洁清晰,易于人阅读和编写,同时也易于机器解析和生成。
  • 高效性:相比 XML,JSON 更小、更快,更易解析,因此其被广泛应用于网络数据传输领域。
  • 通用性:支持多种编程语言和平台,使得 APIJSON 成为一种通用的数据交换格式。

APIJSON CRUD

1. 创建(Create)

  • ** 功能:** 通过 APIJSON,你可以轻松地向数据库中添加新的记录。
  • 实现:
    1. 定义 API 接口,指定请求方法(如 POST)、URL 和请求体(JSON 格式)。
    2. 在请求体中,包含要创建的数据的字段和值。
    3. 发送请求,APIJSON 后端服务将解析请求体,并将数据插入到数据库中。
  • ** 示例:** 假设有一个名为 users 的表,并希望添加一个新用户。可以发送一个 POST 请求到 /api/users,请求体如下:
{  
  "user": {  
    "id": 0,  
    "name": "John Doe",  
    "age": 30,  
    "email": "johndoe@example.com"  
  }  
}

2. 读取(Read)

  • ** 功能:** 通过 APIJSON,你可以从数据库中检索数据。
  • 实现:
    1. 定义 API 接口,指定请求方法(如 GET)、URL 和查询参数(可选)。
    2. 发送请求,APIJSON 后端服务将根据查询参数从数据库中检索数据。
  • ** 示例:** 要检索所有用户,你可以发送一个 GET 请求到 /api/users。要检索特定用户(如 ID 为 1 的用户),你可以发送 GET 请求到 /api/users/1。
GET /User/1

返回结果:

{  
  "code": 200,  
  "msg": "success",  
  "data": {  
    "User": {  
      "id": 1,  
      "name": "John Doe",  
      "age": 30  
    }  
  }  
}

3. 更新(Update)

  • ** 功能:** 通过 APIJSON,你可以修改数据库中的现有记录。
  • 实现:
    1. 定义 API 接口,指定请求方法(如 PUT 或 PATCH)、URL 和请求体(JSON 格式)。
    2. 在请求体中,包含要更新的数据的字段和新的值,以及用于标识要更新的记录的 ID 或其他唯一标识符。
    3. 发送请求,APIJSON 后端服务将解析请求体,并更新数据库中的记录。
      -** 示例:** 要更新 ID 为 1 的用户的邮箱地址,你可以发送一个 PUT 或 PATCH 请求到 /api/users/1,请求体如下:
{  
  "user": {  
    "id": 1,  
    "email": "newemail@example.com"  
  }  
}

4. 删除(Delete)

  • 功能: 通过 APIJSON,你可以从数据库中删除现有记录。
  • 实现:
    1. 定义 API 接口,指定请求方法(如 DELETE)、URL 和查询参数(可选)。
    2. 发送请求,APIJSON 后端服务将根据 URL 或查询参数从数据库中删除记录。
  • 示例: 要删除 ID 为 1 的用户,你可以发送一个 DELETE 请求到 /api/users/1。
DELETE /User/1

DEMO

流程

  • ** 项目设置:** 首先,确保你的项目中已经引入了 APIJSON 的依赖。对于 Java 项目,你需要在 pom.xml 文件中添加 APIJSON 的依赖(参考文章 1)。
  • ** 数据库配置:** 按照 APIJSON 的要求,配置数据库连接信息(如 URL、用户名、密码等)。在 Demo 中,这些信息通常位于配置文件中,如 DemoSQLConfig.java(参考文章 2)。
  • ** 数据表:** 假设我们有一个名为 users 的数据表,包含 id、name、age 等字段。

pom.xml

	
		dependency>
			groupId>com.github.TencentgroupId>
			artifactId>APIJSONartifactId>
			version>6.3.0version>
		dependency>
		dependency>
			groupId>com.github.APIJSONgroupId>
			artifactId>apijson-frameworkartifactId>
			version>6.3.0version>
		dependency>

		
		dependency>
			groupId>mysqlgroupId>
			artifactId>mysql-connector-javaartifactId>
			version>8.0.29version>
		dependency>
		
		dependency>
			groupId>org.springframework.bootgroupId>
			artifactId>spring-boot-starter-webartifactId>
			version>2.5.13version>
		dependency>
		dependency>
			groupId>com.alibabagroupId>
			artifactId>fastjsonartifactId>
			version>2.0.43version>
		dependency>

application



package apijson.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import apijson.Log;
import apijson.framework.APIJSONApplication;
import apijson.framework.APIJSONCreator;
import apijson.orm.SQLConfig;

@Configuration
@SpringBootApplication
@EnableConfigurationProperties
public class DemoApplication implements WebServerFactoryCustomizerConfigurableServletWebServerFactory> {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(DemoApplication.class, args);
    Log.DEBUG = true;
    APIJSONApplication.init(false);  
  }

  
  @Override
  public void customize(ConfigurableServletWebServerFactory server) {
    server.setPort(8080);
  }

  
  @Bean
  public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
          .allowedOriginPatterns("*")
          .allowedMethods("*")
          .allowCredentials(true)
          .maxAge(3600);
      }
    };
  }
  static {
    
    APIJSONApplication.DEFAULT_APIJSON_CREATOR = new APIJSONCreatorLong>() {
      @Override
      public SQLConfig createSQLConfig() {
        return new DemoSQLConfig();
      }
    };
  }
}

config



package apijson.demo;

import com.alibaba.fastjson.annotation.JSONField;

import apijson.framework.APIJSONSQLConfig;



public class DemoSQLConfig extends APIJSONSQLConfig {

	static {
		DEFAULT_DATABASE = DATABASE_MYSQL;  
		DEFAULT_SCHEMA = "apijson";  
		
		TABLE_KEY_MAP.put("User", "apijson_user");
		TABLE_KEY_MAP.put("Privacy", "apijson_privacy");
	}
	@Override
	public String getDBVersion() {
		return "5.7.22";  
	}
	@JSONField(serialize = false)  
	@Override
	public String getDBUri() {
		return "jdbc:mysql://localhost:3306?serverTimezone=GMT+8&useUnicode=true&characterEncoding=UTF-8"; 
	}
	@JSONField(serialize = false)  
	@Override
	public String getDBAccount() {
		return "root";  
	}
	@JSONField(serialize = false)  
	@Override
	public String getDBPassword() {
		return "123456";  
	}
}

controller



package apijson.demo;

import java.net.URLDecoder;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import apijson.RequestMethod;
import apijson.StringUtil;
import apijson.framework.APIJSONController;
import apijson.orm.Parser;

@RestController
@RequestMapping("")
public class DemoController extends APIJSONControllerLong> {
	@Override
	public ParserLong> newParser(HttpSession session, RequestMethod method) {
		return super.newParser(session, method).setNeedVerify(false);  
	}

	
	@PostMapping(value = "{method}")  
	@Override
	public String crud(@PathVariable String method, @RequestBody String request, HttpSession session) {
		return super.crud(method, request, session);
	}

	
	@PostMapping(value = "crud")  
	
	public String crudAll(@RequestBody String request, HttpSession session) {
		return newParser(session, RequestMethod.CRUD).parse(request);
	}

	
	@PostMapping("{method}/{tag}")  
	@Override
	public String crudByTag(@PathVariable String method, @PathVariable String tag, @RequestParam MapString, String> params, @RequestBody String request, HttpSession session) {
		return super.crudByTag(method, tag, params, request, session);
	}
}

初始化脚本

[初始化脚本](https://gitee.com/APIJSON/APIJSON-Demo/blob/master/MySQL/sys.sql)

请求样例

  1. 请求
curl --location --request POST 'http://localhost:8080/get' 
--header 'Content-Type: application/json' 
--data-raw '{"User[]":{"count":3,"User":[]
    }
}'
  1. 返回
{
    "User[]": [
        [],
        {
            "$ref": "$.User[][0]"
        },
        {
            "$ref": "$.User[][0]"
        }
    ],
    "ok": true,
    "code": 200,
    "msg": "success",
    "debug:info|help": "n 提 bug 请发请求和响应的【完整截屏】,没图的自行解决!n 开发者有限的时间和精力主要放在【维护项目源码和文档】上!n【描述不详细】或【文档 / 常见问题 已有答案】的问题可能会被忽略!!n【态度 不文明 / 不友善】的可能会被踢出群,问题也可能不予解答!!!nn ** 环境信息 **  n 系统: Windows 10 10.0 n 数据库: DEFAULT_DATABASE = MYSQL nJDK: 1.8.0_101 amd64 nAPIJSON: 6.3.0 n   n【常见问题】:https://github.com/Tencent/APIJSON/issues/36 n【通用文档】:https://github.com/Tencent/APIJSON/blob/master/Document.md n【视频教程】:https://search.bilibili.com/all?keyword=APIJSON",
    "time": 1717495293436,
    "sql:generate|cache|execute|maxExecute": "0|0|0|200",
    "depth:count|max": "2|5",
    "time:start|duration|end|parse|sql": "1717495293434|2|1717495293436|2|0"
}

原文地址: 【开源】APIJSON 框架

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-29发表,共计7213字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)