IFC 编辑 API
edit-service 是 IFC 编辑端点的唯一参考,Python FastAPI,默认端口 8100。路径参数 id 匹配 ^m_[0-9a-f]{16}$,guid 是 IFC GlobalId。直连时错误响应是 FastAPI 形态的 {"detail": ...}。
直改链路已于 2026-08-08 退役。修改一律走构建脚本:
PUT /script或POST /script/edit-call。原直改端点返回 410 Gone,不是 404;历史实现可从 git 历史回捞。现役编辑面见 Script 编辑与版本。
端点目录
GET /health
健康检查,返回 {"status": "ok"}。
直改端点,已全部退役
| 端点 | 退役说明 |
|---|---|
PUT /models/{id}/entities/{guid} | 改构件请改构建脚本 |
GET /models/{id}/entities/{guid}/editable-schema | 无直改即无类型化表单 |
DELETE /models/{id}/entities/{guid} | 删除构件同样走脚本 |
POST /models/{id}/commit | script/save 是唯一的版本检查点 |
均返回 410 {"detail": "direct IFC editing retired: edit the build script (script-as-source)"}。
GET /models/{id}/pending
当前 pending 列表,无则空数组。直改退役后仅作运行簿记。此接口不校验模型是否存在。
DELETE /models/{id}/pending
丢弃全部 pending,返回丢弃条数;模型不存在返回 404。
GET /models/{id}/history
持久化编辑历史,存储在模型的 edit-history.json。直改退役后只读保留,新记录来自外部修改登记接口。
GET /models/{id}/versions
{"versions": [{"version": "v1", "createdAt": "<ISO8601 UTC>"}, ...], "current": "v2"}只有最新大版本的 IFC 在盘上,历史版本按需从脚本重建,见编辑工作流。
POST /models/{id}/diff
body 是 {"base": "v1", "target": "v2"},target 可为 "current" 表示当前状态:
{
"base": "v1",
"target": "v2",
"added": ["<guid>", ...],
"removed": ["<guid>", ...],
"changed": [{"guid": "...", "changes": [{"field": "...", "old": ..., "new": ...}]}]
}版本不存在返回 404,缺参数返回 422。对比是属性级语义,不做几何对比。
POST /models/{id}/diff/upload
上传对比。multipart 字段 file 是待对比的 IFC,和当前状态做属性级对比。响应比普通 diff 多一个 labels,即 guid 到可读名称的映射。不落盘、不缓存;文件非法返回 422。
脚本编辑端点
GET/PUT /models/{id}/script、script/params、script/undo|redo|discard、script/run、script/save、script/rollback、script/diff、script/staging/diff、script/locate、script/edit-call、GET /models/{id}/scripts。语义见 Script 编辑与版本,机器可读 schema 见编辑 API 参考。
经 Go 代理
Go server 把这些端点暴露在 /api/v1 下:
- 脚本编辑端点一一对应,路径不变,query 透传。run、save、rollback 成功后自动排队重转 XKT。
script/edit-call不经代理,仅直连可用。 - 只读与对比端点在
edit/...前缀下:edit/diff、edit/pending、edit/history、edit/versions。 - 直改代理路由已随退役删除。
与直连的差异:响应统一包 envelope,错误码映射为 40400、40900、40001、50200 等,见 REST API。