Habilidad para la CLI de Yaak
La CLI yaak (@yaakapp/cli) controla el cliente de escritorio de Yaak para APIs desde la terminal. Lee y escribe la misma base de datos SQLite local que la aplicación de escritorio: los cambios se reflejan instantáneamente en ambas direcciones.
Prerrequisitos
- CLI
yaakinstalada:npm install -g @yaakapp/cli - Aplicación de escritorio Yaak (opcional pero recomendada para verificación visual)
Banderas globales
| Bandera | Propósito |
|---|---|
--data-dir <DIR> | Directorio de datos personalizado |
-e, --environment <ID> | ID de entorno para sustitución de variables |
--cookie-jar <ID> | ID del tarro de cookies para la ejecución de solicitudes |
-v, --verbose | Salida detallada (eventos, cuerpo transmitido) |
--log [NIVEL] | Registro de CLI (error |
Árbol de comandos
yaak
├── workspace list | show <id> | create | update <id> | delete <id> [--yes]
├── request list [<ws-id>] | show <id> | create [<ws-id>] | update <id> | delete <id> [--yes] | send <id> | schema <type>
├── folder list [<ws-id>] | show <id> | create -n <nombre> [<ws-id>] | update <id> | delete <id> [--yes]
├── environment list [<ws-id>] | show <id> | create | update <id> | delete <id> [--yes]
├── cookie-jar list [<ws-id>]
├── send <ID> # solicitud, carpeta o workspace
├── auth login | logout | whoami
└── plugin build | dev | generate | install | publish
Regla de múltiples workspaces: Cuando solo existe un workspace, [<ws-id>] es opcional. Con múltiples workspaces, DEBES pasar el ID del workspace como primer argumento posicional.
Workspaces
yaak workspace list # listar todos los workspaces
yaak workspace show <ws-id> # JSON completo
yaak workspace create -n "Mi API" # crear por nombre
yaak workspace create --json '{"name":"Mi API","headers":[...]}' # crear con configuración
yaak workspace update <ws-id> --json '{"name":"Renombrado"}'
yaak workspace delete <ws-id> --yes # eliminación no interactiva
Carpetas
yaak folder list [<ws-id>] # listar carpetas en el workspace
yaak folder show <folder-id> # JSON completo
yaak folder create -n "Auth" [<ws-id>] # crear en el workspace
yaak folder create --json '{"name":"Auth","workspaceId":"wk_..."}' [<ws-id>]
yaak folder update <folder-id> --json '{"name":"Renombrado"}'
yaak folder delete <folder-id> --yes
Solicitudes
Listar e inspeccionar
yaak request list [<ws-id>] # listar todas las solicitudes
yaak request show <req-id> # JSON completo (método, URL, cabeceras, cuerpo, etc.)
Crear
Banderas rápidas:
yaak request create [<ws-id>] -n "Obtener Usuarios" -m GET -u "https://api.example.com/users"
JSON completo:
yaak request create [<ws-id>] --json '{
"name": "Crear Usuario",
"method": "POST",
"url": "https://api.example.com/users",
"folderId": "fl_...",
"bodyType": "application/json",
"body": {
"text": "{\"name\":\"test\",\"email\":\"[email protected]\"}"
},
"headers": [
{"name":"Authorization","value":"Bearer token","enabled":true}
]
}'
Campos clave para --json:
| Campo | Tipo | Notas |
|---|---|---|
name | string | Nombre para mostrar |
method | string | GET, POST, PUT, PATCH, DELETE |
url | string | URL de la solicitud |
folderId | string | ID de la carpeta padre |
bodyType | string | application/json, multipart/form-data, application/x-www-form-urlencoded, text/plain, etc. |
body.text | string | Contenido del cuerpo (convierte JSON a string para application/json) |
headers | array | [{name, value, enabled}] |
authenticationType | string | basic, bearer, oauth2, etc. |
authentication | object | Configuración de autenticación según el tipo |
Actualizar
yaak request update <req-id> --json '{"name":"Nombre Actualizado","url":"https://nueva-url.com"}'
Eliminar
yaak request delete <req-id> --yes
Enviar
yaak send <req-id> # enviar una sola solicitud
yaak send <req-id> -v # detallado (cabeceras, eventos)
yaak send <folder-id> # enviar todas las solicitudes de una carpeta
yaak send <ws-id> --parallel --fail-fast # enviar todo el workspace
Banderas de envío:
--parallel— ejecutar solicitudes en paralelo--fail-fast— abortar al primer fallo (funciona con envíos de carpeta/workspace)-e <env-id>— usar entorno para sustitución de variables-v— salida detallada (muestra cabeceras de solicitud/respuesta, cuerpo transmitido)
Introspección del esquema
yaak request schema http # Esquema JSON para solicitudes HTTP
yaak request schema grpc # Esquema JSON para solicitudes gRPC
yaak request schema websocket # Esquema JSON para solicitudes WebSocket
Úsalo para entender la estructura exacta del payload --json para crear/actualizar.
Entornos
yaak environment list [<ws-id>] # listar entornos
yaak environment show <env-id> # JSON completo con variables
yaak environment create [<ws-id>] -n "Producción"
yaak environment update <env-id> --json '{
"name": "Producción",
"variables": [
{"name":"BASE_URL","value":"https://api.prod.com"},
{"name":"API_KEY","value":"secreto123"}
]
}'
yaak environment delete <env-id> --yes
Usar entornos
Pasa -e <env-id> a cualquier comando send para la sustitución de variables:
yaak send <req-id> -e <env-id>
Sintaxis de plantilla en las solicitudes:
- Variables:
${[ mi_variable ]} - Funciones:
${[ uuid() ]},${[ timestamp() ]},${[ fs.readFile('/ruta') ]}
Autenticación
yaak auth whoami # verificar estado de inicio de sesión
yaak auth login # iniciar sesión vía navegador
yaak auth logout # cerrar sesión
Operaciones por lotes
Crear múltiples solicitudes desde un script
#!/bin/bash
WS="wk_..."
FL_AUTH="fl_..."
FL_PROD="fl_..."
# Endpoints de autenticación
yaak request create "$WS" --json '{"name":"Iniciar Sesión","method":"POST","url":"https://api.example.com/auth/login","folderId":"'"$FL_AUTH"'","bodyType":"application/json","body":{"text":"{\"username\":\"usuario\",\"password\":\"contraseña\"}"}}'
yaak request create "$WS" --json '{"name":"Mi Perfil","method":"GET","url":"https://api.example.com/auth/me","folderId":"'"$FL_AUTH"'"}'
# Endpoints CRUD
for op in "GET list /users" "POST create /users" "GET get /users/1" "PUT update /users/1" "DELETE delete /users/1"; do
read -r method label path <<< "$op"
yaak request create "$WS" --json '{"name":"'"${label^}"" "'${path#/}'"","method":"'"$method"'","url":"https://api.example.com'"$path"'","folderId":"'"$FL_PROD"'"}'
done
Eliminar todas las solicitudes en un workspace
yaak request list <ws-id> | awk '{print $1}' | while read id; do
yaak request delete "$id" --yes
done
Clonar la estructura de un workspace a uno nuevo
# Crear nuevo workspace
NUEVO_WS=$(yaak workspace create -n "Copia" | awk '{print $NF}')
# Crear carpetas
yaak folder list <old-ws> | while read id nombre; do
yaak folder create -n "$nombre" "$NUEVO_WS"
done
# Luego crear solicitudes con los nuevos IDs de carpeta
Salida JSON
Todos los comandos show y list generan JSON (o una línea por elemento para list). Envíalos a jq para filtrar:
yaak request show <req-id> | jq '.url'
yaak workspace list | jq -r '.[] | .id + " " + .name'
Patrones comunes
Organizar por recurso
Crea una carpeta por recurso de API, luego solicitudes CRUD dentro:
WS="wk_..."
FL=$(yaak folder create -n "Usuarios" "$WS" | awk '{print $NF}')
yaak request create "$WS" --json '{"name":"Listar Usuarios","method":"GET","url":"https://api.example.com/users","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Obtener Usuario","method":"GET","url":"https://api.example.com/users/1","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Crear Usuario","method":"POST","url":"https://api.example.com/users","folderId":"'"$FL"'","bodyType":"application/json","body":{"text":"{\"name\":\"nuevo usuario\"}"}}'
Cambio de URL basado en entorno
# Entorno de desarrollo
yaak environment create "$WS" -n "Dev"
yaak environment update <dev-env-id> --json '{"variables":[{"name":"BASE_URL","value":"http://localhost:3000"}]}'
# Entorno de producción
yaak environment create "$WS" -n "Prod"
yaak environment update <prod-env-id> --json '{"variables":[{"name":"BASE_URL","value":"https://api.production.com"}]}'
# Usar en la URL de la solicitud
yaak request create "$WS" --json '{"name":"Obtener Usuarios","method":"GET","url":"${[ BASE_URL ]}/users","folderId":"..."}'
# Enviar con entorno
yaak send <req-id> -e <dev-env-id> # apunta a localhost
yaak send <req-id> -e <prod-env-id> # apunta a producción
Valores predeterminados a nivel de workspace
Establece cabeceras/autenticación a nivel de workspace (heredadas por todas las solicitudes):
yaak workspace update "$WS" --json '{
"headers": [
{"name":"Content-Type","value":"application/json","enabled":true},
{"name":"Accept","value":"application/json","enabled":true}
],
"authenticationType": "bearer",
"authentication": {"token":"${[ API_TOKEN ]}"}
}'
Consejos
- Siempre ejecuta
yaak request schema <type>antes de crear payloads complejos: el esquema muestra los nombres y tipos de campo exactos. - Usa
--verboseensendpara depurar detalles de solicitud/respuesta. - La CLI es idempotente para lecturas: es segura para scripts y reejecuciones.
- La aplicación de escritorio refleja los cambios de la CLI al instante (base de datos SQLite compartida).
--yesomite los avisos de confirmación: esencial para eliminaciones en scripts.