跳转到主要内容
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")