APIJSON:用JSON自动生成API,告别手写CRUD!【.NET 8 集成案例,也支持JAVA】

🎀🎀🎀代码之美系列目录🎀🎀🎀

一、C# 命名规则规范
二、C# 代码约定规范
三、C# 参数类型约束
四、浅析 B/S 应用程序体系结构原则
五、浅析 C# Async 和 Await
六、浅析 ASP.NET Core SignalR 双工通信
七、浅析 ASP.NET Core 和 MongoDB 创建 Web API
八、浅析 ASP.NET Web UI 框架 Razor Pages/MVC/Web API/Blazor
九、如何使用 MiniProfiler WebAPI 分析工具
十、浅析 .NET Core 中各种 Filter
十一、C#.Net筑基-类型系统
十二、C#.Net 筑基-运算符
十三、C#.Net筑基-解密委托与事件
十四、C#.Net筑基-集合知识大全
十五、C#.Net筑基 - 常见类型
十六、C#.NET体系图文概述---2024最全总结
十七、C# 强大无匹的模式匹配,让代码更加优雅
十八、C# 中的记录类型简介
十九、C# 异步编程模型【代码之美系列】
二十、C#高级篇 反射和属性详解【代码之美系列】
二十一、.NET Core 中获取各种路径的的方法汇总【代码之美】
二十二、【C#实战】动态模板替换:根据Model字段名称自动匹配替换值【代码之美】
二十三、.NET 集成 Velocity 模板引擎实现动态代码生成(高性能+易扩展)
二十四、在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
二十五、.NET8 中间件与过滤器的对比:深入解析与应用场景
二十六、一文快速了解.NET项目文件(.csproj) ,基础而重要的文件【代码之美系列】

文章目录

  • 🎀🎀🎀代码之美系列目录🎀🎀🎀
  • 前言
  • [一、 什么是 APIJSON?为什么它是"效率神器"?](#一、 什么是 APIJSON?为什么它是“效率神器”?)
  • [二、 .NET 8 为何是 APIJSON 的"最佳拍档"?](#二、 .NET 8 为何是 APIJSON 的“最佳拍档”?)
  • [三、 实战:在 .NET 8 项目中集成 APIJSON](#三、 实战:在 .NET 8 项目中集成 APIJSON)
    • [第 1 步:创建项目并安装依赖](#第 1 步:创建项目并安装依赖)
    • [第 2 步:配置数据库连接](#第 2 步:配置数据库连接)
    • [第 3 步:创建数据模型(以 User 和 Post 为例)](#第 3 步:创建数据模型(以 User 和 Post 为例))
    • [第 4 步:核心配置与服务注册](#第 4 步:核心配置与服务注册)
  • [四、 体验奇迹:无需编码,直接调用!](#四、 体验奇迹:无需编码,直接调用!)
    • [1. 查询单个用户 (GET)](#1. 查询单个用户 (GET))
    • [2. 复杂查询:获取用户及其所有文章 (联表查询!)](#2. 复杂查询:获取用户及其所有文章 (联表查询!))
    • [3. 新增数据 (POST)](#3. 新增数据 (POST))
    • [4. 修改数据 (PUT)](#4. 修改数据 (PUT))
    • [5. 删除数据 (DELETE)](#5. 删除数据 (DELETE))
  • [五、 高级特性与权限控制](#五、 高级特性与权限控制)
  • [六、 总结](#六、 总结)

前言

还在为每个页面手写增删改查接口而烦恼吗?还在为前后端接口联调而扯皮吗?.NET 8 遇上 APIJSON,带你体验"零代码"API后端的极致效率!


一、 什么是 APIJSON?为什么它是"效率神器"?

APIJSON 是一种专为 API 设计的 JSON 查询语言,更是一个 全自动 ORM 框架。它的核心理念可以概括为一句话:

"前端传 JSON,后端自动生成并执行 SQL,直接返回结果。"

✨这意味着,对于绝大多数常规的数据库操作,.NET 后端开发者无需再编写任何 Controller、Service、Repository 甚至 SQL 代码!

🎯它为我们解决了哪些痛点?

  • 接口爆炸 :一个简单的项目动辄上百个 API,维护成本极高。
  • 过度获取/获取不足:固定返回的字段无法满足前端灵活多变的需求。
  • 开发效率低下 :重复的 CRUD 工作占据了大量开发时间。
  • 联调成本高:接口文档更新不及时,前后端沟通不畅。

APIJSON 通过一个统一的、通用的 API 端点,让前端自己描述所需的数据结构和查询逻辑,后端只需负责权限控制和部署,开发效率提升 500% 以上!

🚀github官网:https://github.com/liaozb/APIJSON.NET

gitee官网:https://gitee.com/liaozb/APIJSON.NET

二、 .NET 8 为何是 APIJSON 的"最佳拍档"?

.NET 8 是微软最新的 LTS 长期支持版本,以其卓越的性能、跨平台能力和精简的架构而闻名。将 APIJSON.NET 8 结合,堪称天作之合:

  • 卓越性能 :.NET 8 的极高吞吐量和低延迟,完美契合 APIJSON 作为通用数据网关的定位。
  • 原生 AOT 支持 :可编译为原生应用,启动速度更快,资源占用更低,非常适合容器化部署 APIJSON 服务。
  • Minimal API 与原生 DI:使得集成第三方框架(如 APIJSON)的代码更加简洁、优雅。
  • 强大的生态系统 :配合 Entity Framework CoreDapperSugar 或其他 ORM,让 APIJSON 的数据库操作如虎添翼。

三、 实战:在 .NET 8 项目中集成 APIJSON

接下来,我们将一步步创建一个 .NET 8 WebAPI 项目,并集成 APIJSON.NET 这个官方支持的 .NET 版本。

第 1 步:创建项目并安装依赖

bash 复制代码
dotnet new webapi -n ApiJsonDemo
cd ApiJsonDemo
dotnet add package APIJSON.NET

这个 APIJSON.NET 包包含了所有核心功能。

第 2 步:配置数据库连接

appsettings.json 中添加你的数据库连接字符串:

json 复制代码
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.;Database=ApiJsonTest;Trusted_Connection=true;TrustServerCertificate=true;"
  },
  // ... other settings
}

第 3 步:创建数据模型(以 User 和 Post 为例)

csharp 复制代码
// Models/User.cs
public class User
{
    public long Id { get; set; }
    public string? Name { get; set; }
    public string? Email { get; set; }
    public DateTime CreateTime { get; set; }
}

// Models/Post.cs
public class Post
{
    public long Id { get; set; }
    public string? Title { get; set; }
    public string? Content { get; set; }
    public long UserId { get; set; } // 外键关联用户
    public User? User { get; set; } // 导航属性
    public DateTime CreateTime { get; set; }
}

第 4 步:核心配置与服务注册

Program.cs 中,我们进行依赖注入和中间件的配置。

csharp 复制代码
using APIJSON.NET;
using APIJSON.NET.Services;
using APIJSON.NET.Store;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 1. 注册 DbContext (这里使用内存数据库做演示,生产环境请用SQL Server/MySQL等)
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseInMemoryDatabase("ApiJsonDemo"));

// 2. 注册 APIJSON 所需的服务
builder.Services.AddAPIJSON(options =>
{
    // 配置 APIJSON 选项,例如自定义时间格式等
})
.AddAuthentication() // 如果需要权限验证,在此配置
.AddORM<AppDbContext>(); // 注册 ORM 实现,使用你项目的 DbContext

// 3. 添加 Swagger 以便测试
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 配置 HTTP 请求管道
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

// 4. 使用 APIJSON 中间件,并配置路由
// 这将提供一个统一的入口点,例如 /apijson
app.UseAPIJSON("apijson");

app.Run();

创建 DbContext:

csharp 复制代码
// Data/AppDbContext.cs
using Microsoft.EntityFrameworkCore;
using ApiJsonDemo.Models;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

    public DbSet<User> Users { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 可以在这里进行种子数据初始化
        modelBuilder.Entity<User>().HasData(
            new User { Id = 1, Name = "托尼·斯塔克", Email = "tony@stark.com", CreateTime = DateTime.Now },
            new User { Id = 2, Name = "美国队长", Email = "cap@avengers.com", CreateTime = DateTime.Now }
        );
        modelBuilder.Entity<Post>().HasData(
            new Post { Id = 1, Title = "我的第一篇文章", Content = "这是内容...", UserId = 1, CreateTime = DateTime.Now }
        );
    }
}

四、 体验奇迹:无需编码,直接调用!

现在,神奇的部分来了!我们没有编写任何一个 API 控制器,但已经拥有了对 UserPost 表的完整 CRUD 能力。

启动项目 (dotnet run),打开 Swagger 界面或使用 Postman

1. 查询单个用户 (GET)

请求: POST /apijson/get

json 复制代码
{
  "User": {
    "id": 1
  }
}

响应:

json 复制代码
{
  "User": {
    "id": 1,
    "name": "托尼·斯塔克",
    "email": "tony@stark.com",
    "createTime": "2024-06-07T10:30:00"
  },
  "code": 200,
  "msg": "success"
}

2. 复杂查询:获取用户及其所有文章 (联表查询!)

请求: POST /apijson/get

json 复制代码
{
  "User": {
    "id": 1
  },
  "[]": {
    "Post": {
      "userId@": "User/id",
      "@column": "id,title,createTime"
    }
  }
}

响应:

json 复制代码
{
  "User": {
    "id": 1,
    "name": "托尼·斯塔克",
    "email": "tony@stark.com",
    "createTime": "2024-06-07T10:30:00"
  },
  "[]": [
    {
      "Post": {
        "id": 1,
        "title": "我的第一篇文章",
        "createTime": "2024-06-07T10:35:00"
      }
    }
  ],
  "code": 200,
  "msg": "success"
}

看!我们无需编写 JOIN 语句,APIJSON 自动帮我们完成了关联查询!

3. 新增数据 (POST)

请求: POST /apijson/post

json 复制代码
{
  "Post": {
    "title": "APIJSON 太强了!",
    "content": "这篇博文介绍了如何在 .NET 8 中使用 APIJSON。",
    "userId": 2
  }
}

4. 修改数据 (PUT)

请求: POST /apijson/put

json 复制代码
{
  "User": {
    "id": 2,
    "name": "史蒂夫·罗杰斯"
  }
}

5. 删除数据 (DELETE)

请求:POST /apijson/delete

json 复制代码
{
  "Post": {
    "id": 1,
    "@delete": true
  }
}

五、 高级特性与权限控制

APIJSON 的功能远不止于此:

  • 灵活字段控制 (@column):指定返回的字段,避免数据冗余。
  • 复杂条件查询 (&, |, %, $等):实现 LIKE, IN, BETWEEN 等复杂查询。
  • 分页排序 (@page, @order):轻松实现数据分页和排序。
  • 权限控制 :通过配置 apijson_access 表,可以精确控制角色对表、字段的读写权限,保障数据安全。在 .NET 中,你可以实现 IAuth 接口来自定义验证逻辑。

六、 总结

通过本文,我们成功地在 .NET 8 项目中集成了 APIJSON,实现了 "零代码" API 后端。这种开发模式带来了革命性的效率提升:

  • 后端 :从重复的 CRUD 中解放出来,专注于核心业务逻辑和性能优化。
  • 前端:获得了前所未有的灵活性,可以自由组合所需数据,不再受限于后端提供的固定接口。
  • 项目整体:接口数量锐减,联调效率飙升,维护成本大幅降低。

在 .NET 8 高性能的加持下,APIJSON 服务能够轻松应对高并发场景。

相关推荐
唐青枫11 小时前
循环插入太慢?试试 C#.NET SqlBulkCopy,一次导入上百万数据
c#·.net
sky-stars1 天前
.NET 泛型编程(泛型类、泛型方法、泛型接口、泛型委托、泛型约束)
c#·.net·.netcore
StarRocks_labs1 天前
StarRocks 4.0:Real-Time Intelligence on Lakehouse
starrocks·人工智能·json·数据湖·存算分离
敲上瘾1 天前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json
huoshan123452 天前
给旧版 .NET 也开一扇“私有之门”——ILAccess.Fody 实现原理与设计
c#·.net·fody·il·mono.cecil
纸照片2 天前
WPF中为Button设置IsMouseOver和IsPressed事件中改变背景颜色不起作用
c#·.net·wpf
Aevget2 天前
DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(四)
ui·.net·wpf·devexpress·wpf控件
元直数字电路验证2 天前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net