Workspace 由内嵌在 rest.Rest 中的 Workspaces 接口暴露。它们在 Standard、Pro 和 Enterprise 套餐上可用。
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()
api := rest.New(client)
创建 workspace
workspace, err := api.CreateWorkspace("Acme")
if err != nil {
panic(err)
}
fmt.Println(workspace.ID)
名称长度必须为 1–32 个字符,且创建 workspace 需要有效的付费套餐。
列出 workspace
api.GetWorkspaces() 返回已认证用户作为所有者或成员的所有 workspace。
workspaces, err := api.GetWorkspaces()
if err != nil {
panic(err)
}
for _, ws := range workspaces {
fmt.Println(ws.Name, ws.ID)
}
获取单个 workspace
workspace ID 是不带连字符的 UUID v4 值(32 位十六进制字符)。
workspace, err := api.GetWorkspace("1234567890abcdef1234567890abcdef")
if err != nil {
panic(err)
}
fmt.Println(workspace.Name)
fmt.Println(workspace.Owner)
fmt.Println(workspace.Members)
fmt.Println(workspace.Applications)
邀请成员
邀请成员是一个两步握手过程 —— 受邀者通过在其自己的客户端生成一个短时代码来证明同意,然后由所有者消费该代码。
// 1. From the invitee's own SDK client
otherClient := rest.NewClient(os.Getenv("OTHER_USER_API_KEY"))
defer otherClient.Close()
otherAPI := rest.New(otherClient)
code, err := otherAPI.GetWorkspaceInviteCode()
if err != nil {
panic(err)
}
// 2. From the workspace owner's client
err = api.AddWorkspaceMember("1234567890abcdef1234567890abcdef", code, "maintain")
if err != nil {
panic(err)
}
邀请代码由将要加入 workspace 的用户生成,而不是由所有者生成。它是一次性的,并在 5 分钟后过期 —— 生成后请交给所有者/管理员并及时使用。
| 角色 | 说明 |
|---|
owner / admin | 完整的 workspace 管理权限 |
maintain | 对共享应用的操作权限 |
manager | 监控以及应用生命周期(启动、停止、重启) |
view | 只读权限 |
更改成员角色
err := api.UpdateWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01", "admin")
if err != nil {
panic(err)
}
移除成员
err := api.RemoveWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01")
if err != nil {
panic(err)
}
共享应用
err := api.AddWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
if err != nil {
panic(err)
}
err = api.RemoveWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
离开或删除 workspace
删除 workspace 不可逆,且仅所有者可执行。
// As a member
err := api.LeaveWorkspace("1234567890abcdef1234567890abcdef")
// As the owner (irreversible)
err = api.DeleteWorkspace("1234567890abcdef1234567890abcdef")