Workspaces são expostos pela interface Workspaces embutida em rest.Rest. Disponível nos planos Standard, Pro e Enterprise.
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()
api := rest.New(client)
Criando um workspace
workspace, err := api.CreateWorkspace("Acme")
if err != nil {
panic(err)
}
fmt.Println(workspace.ID)
O nome deve ter de 1 a 32 caracteres, e criar um workspace exige um plano pago ativo.
Listando workspaces
api.GetWorkspaces() retorna todos os workspaces em que o usuário autenticado é dono ou membro.
workspaces, err := api.GetWorkspaces()
if err != nil {
panic(err)
}
for _, ws := range workspaces {
fmt.Println(ws.Name, ws.ID)
}
Buscando um workspace específico
IDs de workspace são valores UUID v4 sem hífens (32 caracteres hexadecimais).
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)
Convidando membros
Convidar um membro é um handshake em duas etapas — o convidado prova o consentimento gerando um código de curta duração a partir do próprio cliente, e o dono consome esse código.
// 1. A partir do cliente SDK do convidado
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. A partir do cliente do dono do workspace
err = api.AddWorkspaceMember("1234567890abcdef1234567890abcdef", code, "maintain")
if err != nil {
panic(err)
}
O código de convite é gerado pelo usuário que vai entrar no workspace, não pelo dono. Ele é de uso único e expira após 5 minutos — gere-o, entregue ao dono/admin e consuma-o prontamente.
Papéis
| Papel | Descrição |
|---|
owner / admin | Gerenciamento completo do workspace |
maintain | Acesso operacional às aplicações compartilhadas |
manager | Monitoramento mais ciclo de vida das aplicações (start, stop, restart) |
view | Somente leitura |
Alterando o papel de um membro
err := api.UpdateWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01", "admin")
if err != nil {
panic(err)
}
Removendo um membro
err := api.RemoveWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01")
if err != nil {
panic(err)
}
Compartilhando aplicações
err := api.AddWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
if err != nil {
panic(err)
}
err = api.RemoveWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
Saindo ou deletando um workspace
Deletar um workspace é irreversível e está disponível apenas para o dono.
// Como membro
err := api.LeaveWorkspace("1234567890abcdef1234567890abcdef")
// Como dono (irreversível)
err = api.DeleteWorkspace("1234567890abcdef1234567890abcdef")