Documentation
¶
Overview ¶
Package web Web 层:遵循 cygin 规范的服务启动 + 路由注册 + API handler。
SQL 查询终端 API:查询 / 写操作 / 历史。
Index ¶
- func Mount(r *gin.Engine, svc *service.Service, opts MountOptions)
- func RunWeb(svc *service.Service, host string, port int, allow []string, ...)
- type AIChatReq
- type AISessionIDReq
- type AISessionReq
- type BrowseDirsReq
- type CellValueReq
- type CompareReq
- type CompareResultReq
- type CreateSnapshotReq
- type DeleteConnReq
- type DeleteRowsReq
- type DictionaryReq
- type ExportReq
- type FavoriteAddReq
- type FavoriteRenameReq
- type FavoriteReq
- type GetDatabaseListReq
- type GetDbObjectsReq
- type GetDbSchemasReq
- type GetHistoryReq
- type GetLastTaskReq
- type GetSchemaObjectsReq
- type GetSnapshotReq
- type GetTableColumnsReq
- type GetTablesReq
- type GetTaskReq
- type HistoryItem
- type ImportReq
- type InsertRowReq
- type InspectReq
- type ListHistoryReq
- type ListTasksReq
- type MigrateReq
- type MountOptions
- type PingResult
- type ProcInfo
- type RunTaskReq
- type SQLAuditReq
- type SQLDDLReq
- type SQLGenReq
- type SQLHistoryReq
- type SQLPingReq
- type SQLRunReq
- type SaveConnReq
- type SnapshotCompareReq
- type SnapshotCompareResultReq
- type StartResp
- type TablePageReq
- type TestConnReq
- type UpdateCellReq
- type UploadReq
- type VersionInfo
- type WorkspaceGetReq
- type WorkspaceSaveReq
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Mount ¶
func Mount(r *gin.Engine, svc *service.Service, opts MountOptions)
Mount 将 dqex 的 API 与前端 UI 挂载到宿主 gin engine(同进程形态 B,6.5.1):
- API 挂在 Prefix+"/api"(含 SSE 进度推送/文件下载等原生路由)
- 前端静态资源挂在 Prefix+"/"(SPA 回退经 NoRoute 链,不与宿主已有路由冲突; 宿主自有 NoRoute 会被保留并链式调用)
鉴权外置:本函数不注册令牌认证与来源白名单——宿主在 engine 层接入自己的登录态 (中间件对子树生效即可);同源部署下 iframe 无 token/CORS/SameSite 问题。 StoreNone 库模式下依赖持久化的端点(历史/任务配置/收藏等)返回 ErrStoreUnavailable。
func RunWeb ¶
RunWeb 启动 Web 服务。allow 为访问来源白名单(IP/CIDR/域名)。
安全默认:
- host 默认 127.0.0.1 仅本机访问;对外暴露(--host 0.0.0.0 等)时外部来源强制令牌认证, 且必须配置白名单 --allow / web.allow,否则外部来源一律拒绝(仅本机可访问)
- 默认启用随机令牌认证,但仅校验外部来源:本机回环(127.0.0.1/localhost/::1)免认证, 本地访问开箱即用;noAuth=true 完全关闭认证(对外暴露时给安全警告但不拒绝)
- 白名单内来源仍需令牌(noAuth=true 时免认证);本机回环始终放行,不受白名单约束
- 前端与 API 同源部署,不开启 CORS 通配
Types ¶
type AIChatReq ¶
type AIChatReq struct {
SessionID string `json:"sessionID" binding:"required"`
Text string `json:"text" binding:"required"`
// Action 任务类型:generate(默认)/ explain / fix / optimize / continue
Action string `json:"action"`
// MsgID 本次发起的唯一流水号(前端按会话递增),后端据此幂等去重:
// 同一流水号已处理时重放结果、悬空时复用继续,杜绝重复消息污染上下文。
MsgID string `json:"msgId"`
// ConnID / DB / TabID:会话失效时后端据此透明重建(保留多轮上下文,按 tab 隔离)。
ConnID string `json:"connId"`
DB string `json:"db"`
TabID string `json:"tabId"`
// History 可选:当前对话历史(会话重建时回放,保留多轮上下文)。
History []HistoryItem `json:"history"`
}
AIChatReq 对话请求。
type AISessionIDReq ¶
type AISessionIDReq struct {
ID string `uri:"id" binding:"required"`
}
AISessionIDReq 以路径参数定位会话。
type AISessionReq ¶
type AISessionReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"`
// TabID 可选:所属 query tab(按 tab 隔离对话;空 = 不隔离)。
TabID string `json:"tabId"`
// History 可选:会话重建时回放的历史消息(role/content/msgId),保留多轮上下文。
History []HistoryItem `json:"history"`
}
AISessionReq 创建 AI 会话请求。
type BrowseDirsReq ¶
type BrowseDirsReq struct {
Path string `query:"path"`
}
BrowseDirsReq 目录浏览请求(设置页目录选择器)
type CellValueReq ¶
type CellValueReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名
Table string `json:"table" binding:"required"` // 表名
Column string `json:"column" binding:"required"` // 目标列名
PKColumns []string `json:"pkColumns" binding:"required"` // 主键列名
PKValues []any `json:"pkValues" binding:"required"` // 主键值
}
CellValueReq 单个大字段单元格取值请求:按主键 + 列名定位单行单列,返回完整值。 用于列表省略的大字段(二进制/超长文本)点击查看,避免列表一次传输大量数据。
type CompareReq ¶
type CompareReq struct {
Options service.CompareOptions `json:"options"`
TaskConfigID string `json:"taskConfigId"`
}
CompareReq 对比请求
type CompareResultReq ¶
type CompareResultReq struct {
TaskID string `query:"taskID" binding:"required"`
}
CompareResultReq 对比结果查询请求
type CreateSnapshotReq ¶
type CreateSnapshotReq struct {
ConnID string `json:"connId" binding:"required"`
DBNames []string `json:"dbNames" binding:"required"`
Name string `json:"name" binding:"required"`
Description string `json:"description"`
IncludeSamples bool `json:"includeSamples"`
SampleLimit int `json:"sampleLimit"` // 每表采样行数;<=0 走默认 10
}
CreateSnapshotReq 创建快照请求(支持多库)
type DeleteConnReq ¶
type DeleteConnReq struct {
ID string `uri:"id" binding:"required"`
}
DeleteConnReq 删除连接请求(主键 ID)
type DeleteRowsReq ¶
type DeleteRowsReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名
Table string `json:"table" binding:"required"` // 表名
PKColumns []string `json:"pkColumns" binding:"required"` // 主键列名
Rows [][]any `json:"rows" binding:"required"` // 每行主键值数组(与 PKColumns 顺序一致)
}
DeleteRowsReq 整行删除请求(按主键定位,支持批量删除)
type DictionaryReq ¶
type DictionaryReq struct {
Options service.DictionaryOptions `json:"options"`
Compress *bool `json:"compress"` // 未指定时默认 true
TaskConfigID string `json:"taskConfigId"`
}
DictionaryReq 数据字典请求
type ExportReq ¶
type ExportReq struct {
Options service.ExportOptions `json:"options"`
Compress *bool `json:"compress"` // 未指定时默认 true
TaskConfigID string `json:"taskConfigId"`
}
ExportReq 导出请求
type FavoriteAddReq ¶
type FavoriteAddReq struct {
ConnID string `json:"connId" binding:"required"`
Title string `json:"title"`
DB string `json:"db"`
Mode string `json:"mode"`
SQL string `json:"sql" binding:"required"`
}
FavoriteAddReq 新增收藏请求
type FavoriteRenameReq ¶
type FavoriteRenameReq struct {
ID string `json:"id" binding:"required"`
Title string `json:"title" binding:"required"`
}
FavoriteRenameReq 重命名收藏请求
type FavoriteReq ¶
type FavoriteReq struct {
ConnID string `query:"connId"`
}
FavoriteReq 收藏列表请求(全局共享,无需连接过滤;保留 ConnID 仅作来源标记上下文)
type GetDatabaseListReq ¶
type GetDatabaseListReq struct {
ID string `uri:"id" binding:"required"`
Force bool `query:"force"`
}
GetDatabaseListReq 获取库名列表请求(分级加载第一层,不枚举对象;force=true 绕过缓存刷新)
type GetDbObjectsReq ¶
type GetDbObjectsReq struct {
ID string `uri:"id" binding:"required"`
DB string `query:"db" binding:"required"`
Force bool `query:"force"`
}
GetDbObjectsReq 获取库对象清单请求(分级加载第二层,MySQL/Oracle 无 schema 层;force=true 绕过缓存刷新)
type GetDbSchemasReq ¶
type GetDbSchemasReq struct {
ID string `uri:"id" binding:"required"`
DB string `query:"db" binding:"required"`
Force bool `query:"force"`
}
GetDbSchemasReq 获取库的 schema 列表请求(分级加载第二层,PG 系;force=true 绕过缓存刷新)
type GetHistoryReq ¶
type GetHistoryReq struct {
TaskID string `uri:"taskID" binding:"required"`
}
GetHistoryReq 获取历史请求
type GetLastTaskReq ¶
type GetLastTaskReq struct {
Type string `uri:"type" binding:"required"`
}
GetLastTaskReq 获取最近使用任务请求
type GetSchemaObjectsReq ¶
type GetSchemaObjectsReq struct {
ID string `uri:"id" binding:"required"`
DB string `query:"db" binding:"required"`
Schema string `query:"schema" binding:"required"`
Force bool `query:"force"`
}
GetSchemaObjectsReq 获取 schema 对象清单请求(分级加载第三层,PG 系;force=true 绕过缓存刷新)
type GetSnapshotReq ¶
type GetSnapshotReq struct {
ID string `uri:"id" binding:"required"`
}
GetSnapshotReq 获取快照详情请求
type GetTableColumnsReq ¶
type GetTableColumnsReq struct {
ID string `uri:"id" binding:"required"`
DB string `query:"db"`
Table string `query:"table" binding:"required"`
}
GetTableColumnsReq 获取表列信息请求
type GetTablesReq ¶
GetTablesReq 获取表列表请求(未配置库时返回所有库的树形结构)
type GetTaskReq ¶
type GetTaskReq struct {
ID string `query:"id" binding:"required"`
}
GetTaskReq 获取任务请求
type HistoryItem ¶
type HistoryItem struct {
Role string `json:"role"`
Content string `json:"content"`
MsgID string `json:"msgId"`
}
HistoryItem 重建回放的历史消息条目:role/content 之外,user 消息携带 msgId 流水号 (前端按会话递增生成),供重建后幂等检测去重。
type ImportReq ¶
type ImportReq struct {
Options service.ImportOptions `json:"options"`
Backup *bool `json:"backup"` // 未指定时默认 true
TaskConfigID string `json:"taskConfigId"`
}
ImportReq 导入请求
type InsertRowReq ¶
type InsertRowReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名
Table string `json:"table" binding:"required"` // 表名
Columns []string `json:"columns" binding:"required"` // 写入列名(与 Values 顺序一致)
Values []any `json:"values" binding:"required"` // 对应列值(null 表示 NULL)
}
InsertRowReq 新增行请求(用户显式填写的列与值)
type InspectReq ¶
type InspectReq struct {
Path string `json:"path" binding:"required"`
}
InspectReq 导入文件预览请求
type ListHistoryReq ¶
type ListHistoryReq struct {
Type string `query:"type"`
TaskConfigID string `query:"taskConfigId"`
}
ListHistoryReq 历史列表请求
type MigrateReq ¶
type MigrateReq struct {
Options service.MigrateOptions `json:"options"`
Backup *bool `json:"backup"` // 未指定时默认 true
TaskConfigID string `json:"taskConfigId"`
}
MigrateReq 迁移请求
type MountOptions ¶
type MountOptions struct {
// Prefix 页面 + API 挂载前缀,默认 "/dqex":API 挂 Prefix+"/api",前端页面挂 Prefix+"/"。
// 传 "" 时 API="/api"、页面="/"(与 RunWeb 独立部署路径一致)。
Prefix string
// FrameAncestors 允许 iframe 嵌入本服务的宿主 origin 白名单(CSP frame-ancestors,
// 对本挂载子树全部响应生效);生产环境建议显式配置,防止任意站点嵌入。
FrameAncestors []string
// Fallback 前端静态资源未命中时的回退(如宿主自己的 SPA/404 页面 handler,可为 nil)。
// dqex UI 与宿主 SPA 共存时:先经 dqex 静态资源匹配,未命中交回宿主处理。
Fallback gin.HandlerFunc
}
MountOptions 宿主挂载选项(docs/library-api-design.md 6.5.1 形态 B:同进程同源内嵌)。
type PingResult ¶
type PingResult struct {
OK bool `json:"ok"`
ElapsedMS int64 `json:"elapsedMs"`
Error string `json:"error,omitempty"`
}
PingResult 连接健康检测结果
type RunTaskReq ¶
type RunTaskReq struct {
ID string `json:"id" binding:"required"`
}
RunTaskReq 执行任务请求
type SQLAuditReq ¶
type SQLAuditReq struct {
ConnID string `query:"connId"` // 空 = 全部连接
Limit int `query:"limit"` // <=0 默认 100,上限 500
Offset int `query:"offset"`
}
SQLAuditReq 审计日志查询请求(分页,按连接过滤)
type SQLDDLReq ¶
type SQLDDLReq struct {
ConnID string `query:"connId" binding:"required"`
DB string `query:"db"` // 库名(Oracle 下为 schema)
Type string `query:"type" binding:"required"` // table / view / function / procedure
Name string `query:"name" binding:"required"`
}
SQLDDLReq 对象创建语句查询请求
type SQLGenReq ¶
type SQLGenReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名(点对象树查表时传入,覆盖连接默认库)
engine.GenSQLParams
}
SQLGenReq 快速生成 SQL 请求(表浏览右键生成,字段平铺自 GenSQLParams)
type SQLHistoryReq ¶
type SQLHistoryReq struct {
ConnID string `query:"connId" binding:"required"`
}
SQLHistoryReq 历史记录请求
type SQLPingReq ¶
type SQLPingReq struct {
ConnID string `json:"connId" binding:"required"`
}
SQLPingReq 连接健康检测请求
type SQLRunReq ¶
type SQLRunReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名(点对象树查表时传入,覆盖连接默认库)
SQL string `json:"sql" binding:"required"`
Limit int `json:"limit"` // 返回行数上限,<=0 走默认(1000),最大 1000
Offset int `json:"offset"` // 分页偏移
Mask bool `json:"mask"` // 结果集脱敏:敏感列(password/token/secret 等)统一打码
Mode string `json:"mode"` // 执行模式:transform(默认,转换+限制)| raw(原始直传)
}
SQLRunReq SQL 执行请求(统一查询与写操作,支持多语句批量执行)
type SaveConnReq ¶
type SaveConnReq struct {
ID string `json:"id"`
Name string `json:"name" binding:"required"`
ShortName string `json:"shortName"` // 命令行简写
Env string `json:"env"` // dev/test/staging/prod
Conn service.DBConnInfo `json:"conn"`
}
SaveConnReq 新建/更新连接请求(id 非空为按主键更新)
type SnapshotCompareReq ¶
type SnapshotCompareReq struct {
Options service.SnapshotCompareOptions `json:"options"`
TaskConfigID string `json:"taskConfigId"`
}
SnapshotCompareReq 快照对比请求
type SnapshotCompareResultReq ¶
type SnapshotCompareResultReq struct {
TaskID string `query:"taskID" binding:"required"`
}
SnapshotCompareResultReq 快照对比结果查询
type TablePageReq ¶
type TablePageReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名(点对象树查表时传入,覆盖连接默认库)
Table string `json:"table" binding:"required"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
SortSpecs []engine.SortSpec `json:"sortSpecs"` // 多列排序(按顺序叠加 ORDER BY)
ExcludeColumns []string `json:"excludeColumns"` // 省略的大字段列名(二进制/超长文本,列表不取真实值)
Filters []engine.ColumnFilter `json:"filters"` // 列过滤条件(AND 叠加)
MaxRows int `json:"maxRows"` // 导出时行数上限(仅 /table-export 使用,默认 100000)
}
TablePageReq 对象树数据浏览分页请求:一次返回当前页数据与全表总行数。 独立于 /query(查询终端),是系统自动生成的浏览查询,不写审计/历史。
type TestConnReq ¶
type TestConnReq struct {
ID string `json:"id"`
Conn service.DBConnInfo `json:"conn"`
}
TestConnReq 测试连接请求(支持内联连接或已保存连接 ID)
type UpdateCellReq ¶
type UpdateCellReq struct {
ConnID string `json:"connId" binding:"required"`
DB string `json:"db"` // 目标库名
Table string `json:"table" binding:"required"` // 表名
Column string `json:"column" binding:"required"` // 目标列名
Value any `json:"value"` // 新值(null 表示 SET NULL)
PKColumns []string `json:"pkColumns" binding:"required"` // 主键列名
PKValues []any `json:"pkValues" binding:"required"` // 主键值
}
UpdateCellReq 表浏览单元格更新请求(named bind 更新)
type UploadReq ¶
type UploadReq struct {
File *multipart.FileHeader `file:"file" binding:"required"`
}
UploadReq 导入文件上传请求
type VersionInfo ¶
type VersionInfo struct {
Version string `json:"version"`
CommitID string `json:"commitId"`
BuildTime string `json:"buildTime"`
DBTypes []string `json:"dbTypes"`
// ShowLinks 是否展示开源项目链接(opensource 构建时为 true)
ShowLinks bool `json:"showLinks"`
}
VersionInfo 版本信息(构建版本 + 提交 + 构建时间 + 支持的数据库类型)
type WorkspaceGetReq ¶
type WorkspaceGetReq struct {
ConnID string `query:"connId" binding:"required"`
}
WorkspaceGetReq 查询工作区读取请求(connId 走 query 参数)
type WorkspaceSaveReq ¶
type WorkspaceSaveReq struct {
ConnID string `json:"connId" binding:"required"`
Tabs []service.WorkspaceTab `json:"tabs" binding:"required"`
ActiveID string `json:"activeId"`
TabSettings *service.TabSettings `json:"tabSettings,omitempty"`
}
WorkspaceSaveReq 查询工作区保存请求(整体覆盖)