Yaak CLI 스킬은(는) 무엇을 하나요?
yaak CLI(@yaakapp/cli)는 터미널에서 Yaak 데스크톱 API 클라이언트를 제어합니다. 데스크톱 앱과 동일한 로컬 SQLite 데이터베이스를 읽고/쓰며, 양방향으로 변경 사항이 즉시 반영됩니다.
사전 요구 사항
yaakCLI 설치:npm install -g @yaakapp/cli- Yaak 데스크톱 앱 (선택 사항이지만 시각적 확인에 권장)
전역 플래그
| 플래그 | 목적 |
|---|---|
--data-dir <DIR> | 사용자 지정 데이터 디렉터리 |
-e, --environment <ID> | 변수 치환을 위한 환경 ID |
--cookie-jar <ID> | 요청 실행을 위한 쿠키 저장소 ID |
-v, --verbose | 자세한 출력 (이벤트, 스트리밍 본문) |
--log [LEVEL] | CLI 로깅 (error|warn|info|debug|trace) |
명령어 트리
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 <name> [<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> # 요청, 폴더 또는 워크스페이스
├── auth login | logout | whoami
└── plugin build | dev | generate | install | publish
다중 워크스페이스 규칙: 워크스페이스가 하나만 있으면 [<ws-id>]는 선택 사항입니다. 여러 워크스페이스가 있는 경우 첫 번째 위치 인수로 워크스페이스 ID를 반드시 전달해야 합니다.
워크스페이스
yaak workspace list # 모든 워크스페이스 목록
yaak workspace show <ws-id> # 전체 JSON
yaak workspace create -n "My API" # 이름으로 생성
yaak workspace create --json '{"name":"My API","headers":[...]}' # 설정으로 생성
yaak workspace update <ws-id> --json '{"name":"Renamed"}'
yaak workspace delete <ws-id> --yes # 비대화식 삭제
폴더
yaak folder list [<ws-id>] # 워크스페이스의 폴더 목록
yaak folder show <folder-id> # 전체 JSON
yaak folder create -n "Auth" [<ws-id>] # 워크스페이스에 생성
yaak folder create --json '{"name":"Auth","workspaceId":"wk_..."}' [<ws-id>]
yaak folder update <folder-id> --json '{"name":"Renamed"}'
yaak folder delete <folder-id> --yes
요청
목록 및 검사
yaak request list [<ws-id>] # 모든 요청 목록
yaak request show <req-id> # 전체 JSON (메서드, url, 헤더, 본문 등)
생성
빠른 플래그:
yaak request create [<ws-id>] -n "Get Users" -m GET -u "https://api.example.com/users"
전체 JSON:
yaak request create [<ws-id>] --json '{
"name": "Create User",
"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}
]
}'
--json 의 주요 필드:
| 필드 | 유형 | 참고 |
|---|---|---|
name | 문자열 | 표시 이름 |
method | 문자열 | GET, POST, PUT, PATCH, DELETE |
url | 문자열 | 요청 URL |
folderId | 문자열 | 상위 폴더 ID |
bodyType | 문자열 | application/json, multipart/form-data, application/x-www-form-urlencoded, text/plain 등 |
body.text | 문자열 | 본문 콘텐츠 (application/json의 경우 JSON을 문자열화) |
headers | 배열 | [{name, value, enabled}] |
authenticationType | 문자열 | basic, bearer, oauth2 등 |
authentication | 객체 | 유형별 인증 설정 |
업데이트
yaak request update <req-id> --json '{"name":"Updated Name","url":"https://new-url.com"}'
삭제
yaak request delete <req-id> --yes
전송
yaak send <req-id> # 단일 요청 전송
yaak send <req-id> -v # 자세한 출력 (헤더, 이벤트)
yaak send <folder-id> # 폴더의 모든 요청 전송
yaak send <ws-id> --parallel --fail-fast # 전체 워크스페이스 전송
전송 플래그:
--parallel— 요청을 동시에 실행--fail-fast— 첫 번째 실패 시 중단 (폴더/워크스페이스 전송과 함께 사용)-e <env-id>— 변수 치환을 위해 환경 사용-v— 자세한 출력 (요청/응답 헤더, 스트리밍 본문 표시)
스키마 내부 검사
yaak request schema http # HTTP 요청에 대한 JSON 스키마
yaak request schema grpc # gRPC 요청에 대한 JSON 스키마
yaak request schema websocket # WebSocket 요청에 대한 JSON 스키마
이를 사용하여 create/update에 대한 정확한 --json 페이로드 구조를 이해할 수 있습니다.
환경
yaak environment list [<ws-id>] # 환경 목록
yaak environment show <env-id> # 변수가 포함된 전체 JSON
yaak environment create [<ws-id>] -n "Production"
yaak environment update <env-id> --json '{
"name": "Production",
"variables": [
{"name":"BASE_URL","value":"https://api.prod.com"},
{"name":"API_KEY","value":"secret123"}
]
}'
yaak environment delete <env-id> --yes
환경 사용
변수 치환을 위해 send 명령어에 -e <env-id>를 전달합니다:
yaak send <req-id> -e <env-id>
요청의 템플릿 구문:
- 변수:
${[ my_var ]} - 함수:
${[ uuid() ]},${[ timestamp() ]},${[ fs.readFile('/path') ]}
인증
yaak auth whoami # 로그인 상태 확인
yaak auth login # 브라우저를 통해 로그인
yaak auth logout # 로그아웃
배치 작업
스크립트에서 여러 요청 생성
#!/bin/bash
WS="wk_..."
FL_AUTH="fl_..."
FL_PROD="fl_..."
# 인증 엔드포인트
yaak request create "$WS" --json '{"name":"Login","method":"POST","url":"https://api.example.com/auth/login","folderId":"'"$FL_AUTH"'","bodyType":"application/json","body":{"text":"{\"username\":\"user\",\"password\":\"pass\"}"}}'
yaak request create "$WS" --json '{"name":"Me","method":"GET","url":"https://api.example.com/auth/me","folderId":"'"$FL_AUTH"'"}'
# 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
워크스페이스의 모든 요청 삭제
yaak request list <ws-id> | awk '{print $1}' | while read id; do
yaak request delete "$id" --yes
done
새 워크스페이스로 워크스페이스 구조 복제
# 새 워크스페이스 생성
NEW_WS=$(yaak workspace create -n "Copy" | awk '{print $NF}')
# 폴더 생성
yaak folder list <old-ws> | while read id name; do
yaak folder create -n "$name" "$NEW_WS"
done
# 그런 다음 새 폴더 ID로 요청 생성
JSON 출력
모든 show 및 list 명령어는 JSON을 출력합니다(list의 경우 항목당 한 줄). jq로 파이핑하여 필터링할 수 있습니다:
yaak request show <req-id> | jq '.url'
yaak workspace list | jq -r '.[] | .id + " " + .name'
일반적인 패턴
리소스별 구성
API 리소스당 폴더를 만들고 그 안에 CRUD 요청을 생성합니다:
WS="wk_..."
FL=$(yaak folder create -n "Users" "$WS" | awk '{print $NF}')
yaak request create "$WS" --json '{"name":"List Users","method":"GET","url":"https://api.example.com/users","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Get User","method":"GET","url":"https://api.example.com/users/1","folderId":"'"$FL"'"}'
yaak request create "$WS" --json '{"name":"Create User","method":"POST","url":"https://api.example.com/users","folderId":"'"$FL"'","bodyType":"application/json","body":{"text":"{\"name\":\"new user\"}"}}'
환경 기반 URL 전환
# 개발 환경
yaak environment create "$WS" -n "Dev"
yaak environment update <dev-env-id> --json '{"variables":[{"name":"BASE_URL","value":"http://localhost:3000"}]}'
# 프로덕션 환경
yaak environment create "$WS" -n "Prod"
yaak environment update <prod-env-id> --json '{"variables":[{"name":"BASE_URL","value":"https://api.production.com"}]}'
# 요청 URL에서 사용
yaak request create "$WS" --json '{"name":"Get Users","method":"GET","url":"${[ BASE_URL ]}/users","folderId":"..."}'
# 환경과 함께 전송
yaak send <req-id> -e <dev-env-id> # localhost로 전송
yaak send <req-id> -e <prod-env-id> # 프로덕션으로 전송
워크스페이스 수준 기본값
워크스페이스 수준에서 헤더/인증 설정 (모든 요청에 상속됨):
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 ]}"}
}'
팁
- 복잡한 페이로드를 생성하기 전에 항상
yaak request schema <type>을 실행하세요 — 스키마는 정확한 필드 이름과 유형을 보여줍니다. send명령어에--verbose를 사용하여 요청/응답 세부 정보를 디버깅하세요.- CLI는 읽기 작업에 대해 멱등적입니다 — 스크립트를 작성하고 다시 실행해도 안전합니다.
- 데스크톱 앱이 CLI 변경 사항을 즉시 반영합니다 (공유 SQLite DB).
--yes는 확인 프롬프트를 건너뜁니다 — 스크립트된 삭제에 필수적입니다.