# ApiGoo
**Repository Path**: pingapi/ApiGoo
## Basic Information
- **Project Name**: ApiGoo
- **Description**: Go语言版本的ApiGo 是一款接口开发平台,sql2api,多数据库插件化数据源框架。 支WorkBuddy、千问办公等 AI 办公平台 MCP 接入,通过对话即可开发接口。平台实现动态数据源、动态SQL、函数、存储过程和条件标签,在线可视化编写SQL快速发布API接口,支持接口管理、代理转发、鉴权、限流、熔断和监控告警等一站式API数据服务
- **Primary Language**: Go
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2026-11-01
- **Last Updated**: 2026-11-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
✨ ApiGoo ✨
Go语言 多数据库插件化数据源框架,SQL to API
English | 简体中文
✦ ✦ ✦
## 介绍
**ApiGoo** 是go语言版本的ApiGo多数据库插件化数据源框架,企业项目脚手架,sql2Api等。使用gin和自研框架实现动态数据源和动态SQL、函数和存储过程。
支持 WorkBuddy、千问办公、豆包等 AI 办公平台 MCP 接入,
支持接入(mysql、oracle、postgresql、sqlserver、达梦、TiDB)等SQL数据源,
在线可视化编写SQL后即可快速生成接口对外提供服务,接口一键上下线。减少通用接口的SQL编写,让开发人员专注更复杂的业务逻辑实现。
数据脱敏、数据转换、国密加密、协同开发、接口编排等功能,可集成微服务网关支持接入第三方接口、权限认证、限流、缓存、告警监控和统一日志等一站式API数据服务,
助力于企业数据资产价值升级,成为企业数字化转型的重要推动力。

## 社区版功能
- **工作台**:可视化编写SQL快速的对外发布成API接口,支持多SQL同时执行、Mybatis标签语法,实现动态SQL和动态标签
- **数据源**:数据源列表和数据查询,支持多种SQL/NoSQL数据库添加。
- **应用凭证**:AppKey认证、签名认证的应用创建管理以及对API调用在线授权。
- **接口列表**:查看开发中和已发布的API接口,可进行上下线管理,限流控制等
- **接口文档**:生成在线接口文档,支持在线测试。
- **指标统计**:展示场景的接口调用指标统计
- **接口日志**:查看发布的接口被调用日志列表和请求详情。
## Java版本的 ApiGo 开源地址
https://gitee.com/pingapi/apigo
## 接口开发流程

## 模块
## 运行环境和要求
Go 版本(以仓库 `go.mod` / `Dockerfile` 为准):
| 项目 | 要求 | 说明 |
|:--|:--|:--|
| Go 工具链 | **Go 1.26.0 及以上**(`go 1.26.0`) | 低于该版本无法编译;容器内构建镜像为 `golang:1.26-alpine` |
| 构建方式 | `CGO_ENABLED=0` 静态编译 | 无需 gcc,产物可直接 `COPY` 到 `alpine:3.22` 等精简镜像 |
| 操作系统 | Linux / macOS / Windows | 开发构建跨平台皆可,生产建议 Linux |
| CPU 架构 | `amd64`(X86) / `arm64`(ARM) | 两种架构均有 Docker 镜像 |
运行期环境:
| 项目 | 要求 |
|:--|:--|
| 基础镜像 | `alpine:3.22`(非容器部署无特殊要求) |
| `tzdata` | 必须安装,时间契约固定 `Asia/Shanghai`,缺失会退化为 `+08:00` 固定偏移 |
| `ca-certificates` | 数据源走 TLS(MySQL / PostgreSQL / ClickHouse)时读取系统根证书 |
| 端口 | 默认 `9377`(`server.port` / `SERVER_PORT`),MCP 复用同端口 `/mcp` |
| 磁盘 | 仅平台库与日志,无本地文件依赖;支持 `--read-only --tmpfs /tmp` 启动 |
平台库(存放 `base_*` 8 张表,必选其一):
- **MySQL 8.0+**(推荐 8.4,`docker-compose.yml` 默认 `mysql:8.4`,需 `utf8mb4`)
- **PostgreSQL 14+**
建表脚本见下文「数据库初始化」。
业务数据源(运行时动态接入,按需):MySQL / MariaDB / TiDB / TDSQL / Doris / StarRocks / OceanBase / PolarDB、PostgreSQL / OpenGauss / Greenplum、Oracle、SQL Server(2012+)、达梦 DM、ClickHouse、DuckDB、DolphinDB、Sybase、Hive、DB2。
启动前必须注入的环境变量(`JWT_SECRET` 缺失或强度不足会直接启动失败):
```bash
export JWT_SECRET="$(openssl rand -base64 32)" # 必填,Base64 解码后 ≥ 32 字节
export DB_URL='jdbc:mysql://127.0.0.1:3306/apigo?serverTimezone=Asia/Shanghai&useSSL=false'
export DB_USER=root DB_PWD='Apigo@123'
export MCP_TOKEN='' # 可选,不设置则 /mcp 拒绝全部请求
```
## 快速开始
```bash
# 仓库目录名是 ApiGoo,模块名(go.mod)是 github.com/crabc/apigo-go,按实际路径进入
cd ApiGoo
go build -o /tmp/apigo ./main/apigo
export JWT_SECRET="$(openssl rand -base64 32)" # 必填,缺失或强度不足直接启动失败
export DB_URL='jdbc:mysql://127.0.0.1:3306/apigo?serverTimezone=Asia/Shanghai&useSSL=false'
export DB_USER=root DB_PWD='Apigo@123'
/tmp/apigo
```
打开 (默认账号 `admin / admin123`),平台库先按下一节「数据库初始化」建好。
## 数据库初始化
平台库需要 8 张 `base_*` 表:`base_api_info`、`base_api_param`、`base_api_log`、`base_app`、`base_app_api`、`base_datasource`、`base_group`、`base_sys_user`(对应 `internal/store/` 各仓储文件)。
- **本仓库不随附 DDL**:Go 版仓库内没有 `db/` 目录,也没有 `db/mysql.sql` / `db/dml.sql`;需从 Java 版仓库()取 `db/mysql.sql`,或按 `internal/store/` 里的列名自行建表。
- MySQL 需 `utf8mb4`(`docker-compose.yml` 已带 `--character-set-server=utf8mb4`)。
- 用 `docker compose up -d` 时,把脚本放到本仓库 `./db/mysql.sql`,首次启动会自动执行;`./db` 为空时容器正常启动,只是不建表。
## 常用命令
```bash
gofmt -l . # 无输出为通过
go vet ./...
go test -count=1 ./... # 单元与契约用例
go build -trimpath ./main/apigo
docker compose up -d # MySQL + Go 版一起起,需先 export JWT_SECRET
```
## 目录
```
main/apigo/ 进程入口:配置加载、优雅停机
internal/config/ 配置与密钥校验(含 application.example.yml 的受测用例)
internal/router/ 路由与中间件装配(含 /healthz 健康检查)
internal/middleware/ HTTP 中间件:鉴权、日志等(router 与 controller 共用)
internal/controller/ 控制面 /api/box/sys/** 与数据面 /api/web/**
internal/service/ 业务编排、缓存、限流
internal/store/ 平台 8 张 base_* 表的仓储
internal/dynamic/ 动态 SQL 引擎(if/foreach/choose/trim、#{}、${}、分页)
internal/driver/ 方言、DSN、连接池、元数据、执行器;RouteConn 路由(AbstractRoutingDataSource 等价物)
与 crabc.corn.api 定时快照刷新
internal/plugin/ 结果插件(字段映射、树形、单对象、数据加工)
internal/mcp/ MCP 端点:令牌鉴权、审计;工具清单见 internal/mcp/spec/tools.json(27 个工具)
internal/security/ JWT、SM3、密码
internal/audit/ 审计记录队列
internal/safe/ 并发/恢复等安全包装
internal/apperr/ 统一错误定义
internal/constant/ 常量
internal/httpx/ HTTP 响应封装
internal/model/ 领域模型
internal/ptr/ 指针解引用/构造的通用辅助
internal/web/ 内嵌前端产物(dist + embed.go)
```
用例与实现同目录(`*_test.go`,如 `internal/dynamic/render_test.go`、`internal/driver/dialect_test.go`),没有独立的 `testdata/` 目录。
## 依赖链
`main → internal/router → controller → service → store/driver`,`config/model/httpx/apperr/ptr`
为公共底层。不要反向依赖(例如 `store` 不引用 `service`)。
## 企业版
https://www.apigo.cn
## 企业版架构图
## 运行启动
```
1、先按「数据库初始化」建好平台库(mysql 8.0+ / postgresql 14+,脚本本仓库未随附)
2、编译并启动 Go 进程:go build -o apigo ./main/apigo && ./apigo
(开发期也可直接 go run ./main/apigo)
3、JWT_SECRET 必填,DB_URL / DB_USER / DB_PWD 指向平台库
```
访问地址:http://127.0.0.1:9377 \
账号密码:admin/admin123
## 官网
官网:https://www.apigo.cn
使用指南:http://docs.apigo.cn
## 商用授权
已申请软件著作,开源版仅供个人学习使用 \
企业版功能更强大,商用请加群联系\
## 安全配置(启动必填)
JWT 签名密钥不再内置在代码中,必须由部署环境注入:
```bash
# 首次生成后请妥善保存;更换密钥前不要变更
export JWT_SECRET=$(openssl rand -base64 32)
```
- 未配置、强度不足(Base64 解码后少于 32 字节)或仍是历史泄露密钥时,应用**直接启动失败**,不会回退到任何默认值。
- 签发与校验只使用 `JWT_SECRET` 这一个密钥:更换密钥后,此前签发的令牌全部失效,需要重新登录。
- 本地开发把密钥写在本地配置文件即可:仓库根目录的 `application.yml`、或新建 `config.yaml`、或用 `APIGO_CONFIG=/path/to/xxx.yml` 指定(`config.yaml`、`application-local.yml`、`.env` 已在 `.gitignore` 中忽略;`application.yml` 里的 `crabc.jwt.secret` 保持留空)。
## Docker启动
```bash
export JWT_SECRET="$(openssl rand -base64 32)"
docker compose up -d --build # MySQL 8.4 + apigoo,二者一起起;库表见「数据库初始化」
```
单独运行已构建镜像(X86/AMD 与 ARM 各架构共用同一镜像名):
```bash
docker build -t crabc/apigoo:latest .
docker run -p 9377:9377 \
-e JWT_SECRET="$JWT_SECRET" \
-e DB_URL="jdbc:mysql://localhost:3306/apigo" \
-e DB_USER="root" -e DB_PWD="root" \
-d --name apigoo crabc/apigoo:latest
```
访问地址:http://127.0.0.1:9377
账号密码:admin/admin123
## Windows桌面运行
```
1、先按「数据库初始化」建好平台库(mysql 8.0+)
2、go build -o apigo.exe ./main/apigo
3、set JWT_SECRET=
set DB_URL=jdbc:mysql://127.0.0.1:3306/apigo?serverTimezone=Asia/Shanghai&useSSL=false
set DB_USER=root
set DB_PWD=root
4、apigo.exe
```
Go 版进程不读取 `--spring.*`、`--crabc.*` 命令行参数,配置只来自配置文件与环境变量(环境变量优先)。
## AI 办公工具接入(MCP)
ApiGo 内置 MCP Server(Streamable HTTP),AI 办公工具/Agent 只需配置 **1 个 URL + 1 个 Token**,即可通过对话完成「建数据源 → 写 SQL → 建接口 → 发布 → 授权 → 查日志」全流程(共 27 个工具)。
### 连接地址
| 场景 | MCP Server URL |
|:--|:--|
| 本机 / IDE 联调 | `http://127.0.0.1:9377/mcp` |
| 内网 / Docker 部署 | `http://<服务器IP>:9377/mcp` |
| 公网接入 | `https://<域名>/mcp`(需 HTTPS 反向代理) |
### mcpServers 配置
```json
{
"mcpServers": {
"apigo": {
"type": "streamable-http",
"url": "http://127.0.0.1:9377/mcp",
"headers": {
"Authorization": "Bearer sk-xxxxxxxx"
}
}
}
}
```
## 效果截图
### 接口开发

#### 接口属性

#### 返回参数

#### 在线预览

#### 接口列表

#### 接口限流

#### 指标统计

#### 日志管理

#### 数据源列表

#### 数据查询

#### 数据源类型

## 交流群
**进群前请先点【Star】谢谢**
QQ群(请先Star):748993036
商用咨询加微信 (请备注apigo)

邮箱:iamyuqf@163.com
## 产品使用登记
以下为部分接入apigo的用户 , 点击进行登记