Help us shape the future of Go! Take the 2026 Go Developer Survey

web

package
v1.7.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 11, 2026 License: MIT Imports: 31 Imported by: 0

Documentation

Overview

Package web Web 层:遵循 cygin 规范的服务启动 + 路由注册 + API handler。

SQL 查询终端 API:查询 / 写操作 / 历史。

Index

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

func RunWeb(svc *service.Service, host string, port int, allow []string, noAuth, noBrowser bool)

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

type GetTablesReq struct {
	ID string `uri:"id" binding:"required"`
	DB string `query:"db"`
}

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 ListTasksReq

type ListTasksReq struct {
	Type string `query:"type"`
}

ListTasksReq 任务列表请求

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 ProcInfo

type ProcInfo struct {
	PID  int
	Name string
}

ProcInfo 端口占用进程信息

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 StartResp

type StartResp struct {
	TaskID string `json:"taskID"`
}

StartResp 异步任务启动响应

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 查询工作区保存请求(整体覆盖)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL