跳到主要内容

6.1 表与字段映射

Dataway 将元数据分为接口定义和发布记录两类。保存接口时更新定义,发布时生成记录;数据库和 Nacos 分别使用表和 JSON 对象保存这些数据。

默认存储结构​

使用数据库时,默认有两张表:

  • interface_info:保存可编辑的接口定义,api_id 为接口 ID,api_path 为请求路径,api_script 为原始脚本。
  • interface_release:保存发布快照和历史,pub_id 为发布记录 ID,pub_api_id 关联接口,pub_script 保存发布时的原始脚本。

完整表结构见数据库建表脚本,可按数据库类型选择并复制。

使用 Nacos 时,两类数据保存在同一份 JSON 快照的 records 中:INFO 存放接口定义,RELEASE 存放发布记录。每类数据按记录 ID 组织,记录内使用 ID、PATH、SCRIPT 等字段。例如接口 hello 的脚本位于 records.INFO.hello.SCRIPT。

这些表名、列名和实体键均可自定义。项目有统一命名规范,或已有存储使用不同名称时,可通过映射告诉 Dataway 到哪里读写数据;使用默认名称时无需配置。

配置映射​

EntityType 表示数据类别,INFO 对应接口定义,RELEASE 对应发布记录;FieldDef 表示字段含义,如 ID、SCRIPT。通过 DatawayConfig 将它们对应到实际存储名称:

  • tableMapping:设置数据库表名,或 Nacos records 下的实体键。
  • fieldMapping:设置数据库列名,或 Nacos 记录内的字段名。
自定义存储名称
import net.hasor.dataway.dal.EntityType;
import net.hasor.dataway.dal.FieldDef;

config.tableMapping(EntityType.INFO, "api_definitions")
.tableMapping(EntityType.RELEASE, "api_releases")
.fieldMapping(EntityType.INFO, FieldDef.ID, "definition_id")
.fieldMapping(EntityType.RELEASE, FieldDef.API_ID, "definition_ref")
.fieldMapping(EntityType.RELEASE, FieldDef.SCRIPT, "original_script");

上面的配置对应以下变化,两种存储使用相同的映射后名称:

配置对象数据库:映射前Nacos:映射前映射后
INFO 表 / 实体interface_infoINFOapi_definitions
RELEASE 表 / 实体interface_releaseRELEASEapi_releases
INFO.ID 字段api_idIDdefinition_id
RELEASE.API_ID 字段pub_api_idAPI_IDdefinition_ref
RELEASE.SCRIPT 字段pub_scriptSCRIPToriginal_script

例如,发布脚本在数据库中的位置由 interface_release.pub_script 变为 api_releases.original_script;在 Nacos 中由 records.RELEASE.<记录ID>.SCRIPT 变为 records.api_releases.<记录ID>.original_script。未配置的名称沿用默认值。

在创建 Dataway 前完成配置,每个访问层实例使用一套映射。配置决定读写位置,实际表结构和已保存数据的名称需由应用同步调整。

存储字典​

以下列出默认名称。tableMapping 配置表 / 实体名称,fieldMapping 配置字段名称。

表与实体​

EntityType保存内容数据库表名Nacos 实体键
INFO可编辑的接口定义interface_inforecords.INFO
RELEASE发布快照和历史interface_releaserecords.RELEASE

字段​

Nacos 字段名与 FieldDef 相同;“—”表示该实体不使用此字段。

FieldDef / Nacos 字段INFO 数据库列RELEASE 数据库列
IDapi_idpub_id
API_ID—pub_api_id
METHODapi_methodpub_method
PATHapi_pathpub_path
STATUSapi_statuspub_status
COMMENTapi_commentpub_comment
TYPEapi_typepub_type
SCRIPTapi_scriptpub_script
SCHEMAapi_schemapub_schema
SAMPLEapi_samplepub_sample
OPTIONapi_optionpub_option
REVISIONapi_revisionpub_revision
CREATE_TIMEapi_create_time—
GMT_TIMEapi_gmt_time—
RELEASE_TIME—pub_release_time

命名规则​

项目规则
数据库表名前缀单参数构造方法使用默认表名;指定 tablePrefix 时加在默认表名前。tableMapping 设置完整表名,不再添加前缀
数据库表名格式支持 table、schema.table、catalog.schema.table,具体取决于数据库
数据库名称字符表名各段和列名以字母或下划线开头,仅包含字母、数字和下划线
数据库列名唯一性同一实体的列名不能重复,比较时忽略大小写
Nacos 名称大小写敏感,点号为名称中的普通字符
Nacos 名称唯一性实体键不能重复,同一实体的字段名不能重复
Nacos 初始快照使用配置后的名称,见初始化示例

空名称、不支持的字段和冲突映射会在初始化时被拒绝。