# 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数据服务, 助力于企业数据资产价值升级,成为企业数字化转型的重要推动力。 ![img.png](doc/home.png) ## 社区版功能 - **工作台**:可视化编写SQL快速的对外发布成API接口,支持多SQL同时执行、Mybatis标签语法,实现动态SQL和动态标签 - **数据源**:数据源列表和数据查询,支持多种SQL/NoSQL数据库添加。 - **应用凭证**:AppKey认证、签名认证的应用创建管理以及对API调用在线授权。 - **接口列表**:查看开发中和已发布的API接口,可进行上下线管理,限流控制等 - **接口文档**:生成在线接口文档,支持在线测试。 - **指标统计**:展示场景的接口调用指标统计 - **接口日志**:查看发布的接口被调用日志列表和请求详情。 ## Java版本的 ApiGo 开源地址 https://gitee.com/pingapi/apigo ## 接口开发流程 ![img.png](doc/dev_flow.png) ## 模块 ## 运行环境和要求 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" } } } } ``` ## 效果截图 ### 接口开发 ![img.png](doc/dev.png) #### 接口属性 ![img.png](doc/detail.png) #### 返回参数 ![img.png](doc/param.png) #### 在线预览 ![img_2.png](doc/img_test.png) #### 接口列表 ![img.png](doc/apis.png) #### 接口限流 ![img.png](doc/limit.png) #### 指标统计 ![img.png](doc/monitor.png) #### 日志管理 ![img.png](doc/logs.png) #### 数据源列表 ![img.png](doc/db.png) #### 数据查询 ![img.png](doc/data.png) #### 数据源类型 ![img.png](doc/type.png) ## 交流群 **进群前请先点【Star】谢谢** QQ群(请先Star):748993036 商用咨询加微信 (请备注apigo) ![img.png](doc/img.png) 邮箱:iamyuqf@163.com ## 产品使用登记 以下为部分接入apigo的用户 , 点击进行登记