工作区(Workspace)
工作区是 vjmap 的命名空间机制:不同工作区下的图、符号、KV 存储、全文索引互相隔离。
1. 概念
- 默认工作区:不带名字;URL 用
/api/v1/map/...前缀 - 命名工作区:人为创建;URL 变为
/api/v1/workspace/{name}/...前缀 - 工作区本身也有状态:
{name, description, createTime, ...},由/api/v1/service/getWorkspace列出 - 一个 token 理论上可访问所有工作区;实际权限由
AuthorityId决定
2. 切换工作区(SDK)
Python
svc = Vjmap("http://127.0.0.1:27660/api/v1", token)
svc.switch_workspace("team_a") # 之后所有 map_url / cmd_url 都会自动带上 /workspace/team_a
svc.open_map("finance", "v1", mapopenway="Memory") # → /api/v1/workspace/team_a/cmd/openmap/finance/v1
svc.switch_workspace("") # 切回默认工作区
Node
svc.switchWorkspace('team_a');
await svc.openMap({ mapid: 'finance', version: 'v1', mapopenway: 'Memory' });
svc.switchWorkspace('');
3. 生命周期接口
| # | 操作 | URL | 方法 |
|---|---|---|---|
| 1 | 列出 | /api/v1/service/getWorkspace |
GET |
| 2 | 创建 | /api/v1/service/workspaceCreate |
POST |
| 3 | 修改 | /api/v1/service/workspaceModify |
POST |
| 4 | 删除 | /api/v1/service/workspaceDelete/{name} |
DELETE |
| 5 | 状态 | /api/v1/service/workspaceStatus |
GET |
详细字段、响应示例请看 api/07-workspace.md 。
4. 底层 URL 改写规则
- web服务网关把
/api/v1/workspace/{name}/*改写成 带 workspace 参数的/api/v1/map/*;图形服务不感知名字,由网关保证隔离 - 因此凡是
/api/v1/map/下的路径都能在/workspace/{name}/下一模一样使用 /api/v1/service/*(全局 KV、符号库、全文搜索)不受工作区前缀影响;它们的隔离通过各自的workspace参数实现(大部分接口接受workspace=query)
5 反模式
- 不要在热路径里频繁调用
switch_workspace()再立刻发请求;SDK 内部只是改前缀,没 IO,但业务代码可能会混乱。建议一个 svc 实例绑一个 workspace。 - 不要把
workspace和mapid拼到一起当复合键用;保持每图一个 mapid,workspace 单独字段。
这篇文档有帮助吗?感谢反馈!