
resterm v0.47.3
HTTP/GraphQL/gRPC를 위한 터미널 API 클라이언트로, SSH 터널, WebSocket, SSE, 워크플로우, 프로파일링, OpenAPI, Kubernetes 포트 포워딩 및 헤드리스 API를 지원합니다.
Resterm
REST, GraphQL, gRPC, WebSocket 및 SSE를 위한 터미널 네이티브 API 클라이언트이자 워크벤치입니다.
Resterm은 diff, 검토 및 버전 관리가 가능한 일반 .http 및 .rest 파일을 기반으로 구축된 API-as-code 워크벤치, 즉 더 익숙한 용어로 표현하면 API 클라이언트입니다. 대화형 요청 편집과 선언적 워크플로우, 어서션, mock 서버, 트레이싱, 프로파일링 및 헤드리스 자동화를 결합합니다. 모든 것은 사용자 머신에만 보관됩니다. 계정도, 클라우드 동기화도, 텔레메트리도 없습니다.
GUI 컬렉션 중심의 Postman 스타일 클라이언트를 찾고 있다면 Resterm은 아마 적합하지 않을 것입니다. 그래도 한번 사용해 보세요!
[!NOTE] Resterm이 이제 v1입니다! 새로운 기능과 주요 변경 사항은 v1.0.0 릴리스 노트를 참조하세요.
빠른 링크: 스크린샷 둘러보기, 설치, 빠른 시작, 문서.
스크린샷 둘러보기
UI 작동 모습 보기 (클릭하여 펼치기)
워크플로우
트레이스 및 타임라인
프로파일러
Explain
RestermScript
라이트 테마
OAuth 브라우저 데모 (이전 UI 디자인)
왜 Resterm인가
- HTTP, GraphQL, gRPC, WebSocket 및 SSE를 기본 제공합니다.
- 자동화는 요청 파일 안에 있습니다: 조건문(
@when,@if/@elif/@else,@for-each), 다단계 워크플로우(@workflow/@step), 캡처, 변수 및 어서션(@capture,@var,@assert). - RestermScript는 Resterm을 위해 만들어진 작은 표현 언어로, 필요할 때 JavaScript 훅을 사용할 수 있습니다.
- Vim 스타일 컨트롤로 상황에 맞는 하단 바 힌트, 검색 가능한 오프라인 도움말, 커서 아래 항목의
K도움말,/검색 및:w,:q,:help,:docs같은 명령을 제공합니다. - 내장된 인증 및 터널링: OAuth 2.0(클라이언트 자격 증명, 비밀번호, PKCE 인증 코드), 기존 CLI 기반 인증, SSH 터널 및 Kubernetes 포트 포워딩. 추가 도구가 필요 없습니다.
- CLI 러너: 스크립트 실행 및 CI를 위한
resterm run, JSON 및 JUnit 출력 지원. - mock 서버는 모방하는 요청 옆에 선언되며, 매칭 규칙, 시퀀스, 호출 검증 및 핫 리로드를 지원합니다.
- 타임라인 트레이싱, 프로파일링 및 환경 간 실행 비교.
- WebSocket 및 SSE를 위한 스트리밍 트랜스크립트와 대화형 콘솔.
- AI 통합은 절대 없습니다.
빠른 시작
-
Resterm을 설치합니다(스크립트, Windows 및 수동 설치 방법은 설치 참조).
brew install resterm -
워크스페이스를 생성합니다.
mkdir my-api && cd my-api resterm initresterm init은 인터넷 연결 없이도 작동하는 소규모 프로젝트를 생성합니다. 생성된requests.http에는 로컬 mock 시나리오와 서로 연계되는 몇 가지 요청이 포함되어 있습니다. 이들은 어서션, Bearer 인증, JSON 매칭,json-rules및@for-each를 다룹니다. -
실행하고 첫 번째 요청을 보냅니다.
resterm편집기에서
Ctrl+Enter를 눌러 강조 표시된 요청을 보냅니다.
아직 파일이 없나요? resterm을 실행하고 URL을 입력한 다음 Ctrl+Enter를 누르기만 하면 됩니다. 붙여넣은 curl 명령도 작동합니다.
CLI
resterm run은 TUI를 열지 않고 .http / .rest 파일을 실행하며, CI에서 실행되는 방식입니다.
resterm run --request CreateUser requests.http
생성된 프로젝트는 로컬 mock 서버와 통신합니다. 먼저 다른 터미널에서 시작하세요:
resterm mock requests.http
TUI에서는 g Shift+M을 눌러 워크스페이스에서 동일한 mock 서버를 시작할 수 있습니다.
CLI 문서에는 셀렉터, 출력 형식 및 더 많은 예제가 포함되어 있습니다.
Mock 서버
요청을 담고 있는 동일한 파일이 HTTP mock을 제공할 수 있습니다.
- 쿼리, 헤더 또는 JSON 본문으로 들어오는 요청을 매칭한 다음, 이름이 지정된 응답 또는 기본 응답을 선택합니다.
- 리소스 또는 호출자별 독립 커서를 포함하여, 응답 시퀀스로 폴링 및 재시도 흐름을 모델링합니다.
- 응답을 고정 시간만큼 지연시키거나,
random,normal,jitter로 요청마다 다른 지연 시간을 지정합니다. - 동적 데이터용 생성기와 함께 경로, 쿼리, 헤더 및 본문 값으로 응답을 구성합니다.
@expect로 호출 횟수를 검증하거나 RestermScript에서 수신된 트래픽을 검사합니다.- 선택적 TLS와 함께 소스 파일 및 픽스처를 핫 리로드합니다.
하나의 라우트에 두 가지 시나리오:
### Payment accepted
# @mock method=POST path=/payments name=accepted default=true latency=150ms
HTTP/1.1 202 Accepted
Content-Type: application/json
{"id":"pay_123","status":"pending"}
### Payment declined
# @mock method=POST path=/payments name=declined
# @match query={"mode":"decline"} headers={"X-Tenant":"demo"} json={"amount":0}
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{"error":"amount must be positive"}
단일 파일 또는 전체 디렉터리를 제공합니다:
resterm mock ./requests.http
resterm mock --recursive --addr 127.0.0.1:9090 ./requests
자세한 내용은 Mock 서버 참조, resterm mock CLI 가이드 및 작동 예제를 참조하세요.
헤드리스
headless 패키지는 TUI와 CLI를 구동하는 동일한 엔진의 공개 Go API입니다. 자체 Go 코드 또는 CI에서 요청, 워크플로우, 어서션, 실행 비교 및 프로파일을 실행하는 데 사용하세요.
직접 러너를 구축하고 싶지 않다면 resterm-runner가 있습니다.
키보드 치트 시트
- 패널 포커스 및 레이아웃
Tab/Shift+Tab: 사이드바, 편집기 및 응답 간 이동.g+r,g+i,g+p: 요청, 편집기 또는 응답으로 이동.g+h/g+l: 가로 크기 조정. 사이드바가 포커스된 경우 사이드바 너비를 변경하고, 그 외에는 편집기/응답 분할을 변경합니다.g+j/g+k: 세로로 쌓인 경우 편집기/응답 높이를 조정하고, 네비게이터에서 분기를 접거나 펼칩니다.g+v/g+s: 응답 패널을 인라인과 세로 레이아웃 간에 전환합니다.g+1,g+2,g+3: 사이드바, 편집기, 응답을 최소화하거나 복원합니다.g+z/g+Z: 포커스된 패널을 확대하고, 확대를 해제합니다.
- 환경 및 전역 변수
Ctrl+E: 환경 전환.Ctrl+G: 캡처된 전역 변수 확인.
- 도움말 및 명령
?: 검색 가능한 오프라인 도움말 인덱스 열기.K(편집기 일반 모드): 커서 아래의 지시문, 템플릿 또는 키워드에 대한 도움말 열기.:help <topic>/:man <topic>: 내장 주제 열기;:docs <topic>은 버전에 맞는 전체 매뉴얼을 엽니다.Ctrl+O: 파일/워크스페이스 팝업 열기. 입력하여 필터링하고Up/Down으로 스크롤하며Tab으로 디렉터리 안으로 이동합니다.:: 명령줄 열기.Up/Down으로 제안 사항을 선택하고,Tab으로 자동 완성하거나Enter로 선택 항목을 수락하여 실행합니다.:mock start --source및:edit같은 경로 인자는 동일한 팝업에서 파일 시스템을 탐색합니다.
- 응답
Ctrl+V/Ctrl+U: 나란히 비교할 수 있도록 응답 패널을 분할합니다.Ctrl+Shift+C또는g y(응답 포커스): Pretty, Raw 또는 Headers 탭 전체를 복사합니다.g x: 활성 요청을 보내지 않고 Explain 미리보기를 표시합니다.g e: 현재 파일을 외부 편집기에서 엽니다.
[!TIP] 세 가지 단축키만 기억하세요:
Ctrl+Enter요청 보내기Tab/Shift+Tab패널 전환g+p응답으로 이동
설치
Linux / macOS (Homebrew)
brew install resterm
[!NOTE] Homebrew 설치는 Homebrew로 업데이트해야 합니다(
brew upgrade resterm). 내장된resterm --update명령은 GitHub 릴리스 또는 설치 스크립트에서 설치된 바이너리용입니다.
Linux / macOS (Shell script)
[!IMPORTANT] 사전 빌드된 Linux 바이너리는 glibc 2.32 이상에 의존합니다. 이전 버전 배포판에서는 릴리스 아카이브를 사용하기 전에 최신 glibc 툴체인으로 소스에서 빌드하거나 glibc를 업그레이드하세요.
curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
또는 wget 사용:
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
Windows (PowerShell)
iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex
스크립트는 아키텍처를 감지하고 최신 릴리스를 다운로드한 후 바이너리를 설치합니다.
수동 설치
[!NOTE] 수동 설치 도우미는
curl과jq를 사용합니다. 패키지 관리자로jq를 설치하세요(brew install jq,sudo apt install jq등).
Linux / macOS
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)
# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"
# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm
Windows (PowerShell)
$latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest
$asset = $latest.assets | Where-Object { $_.name -like 'resterm_Windows_*' } | Select-Object -First 1
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe
# Optionally relocate to a directory on PATH, e.g.:
Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"
소스에서 빌드
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
업데이트
resterm --check-update
resterm --update
첫 번째 명령은 최신 릴리스가 있는지 보고합니다. 두 번째 명령은 새 릴리스를 다운로드하고 검증한 후 제자리에 설치합니다. Windows에서는 이전 바이너리가 resterm.exe.old로 새 바이너리 옆에 남으며 다음 업데이트 시 정리됩니다.
구성
- 환경은 요청 디렉터리, 워크스페이스 루트 또는 CWD에서 발견되는 JSON 파일(
resterm.env.json)입니다. 파일은 api, app, credentials 등과 같은 명명된 환경 또는 독립 그룹을 정의할 수 있으며, 이들이 결합되어 하나의 환경이 됩니다. Dotenv 파일(.env,.env.*)은--env-file을 통해 선택적으로 사용하며 단일 워크스페이스 전용입니다. 그룹 환경 및_examples/grouped/의 실행 가능한 샘플을 참조하세요. - 구성은 OS별로 저장되며
RESTERM_CONFIG_DIR로 재정의할 수 있습니다:- macOS:
~/Library/Application Support/resterm - Windows:
%APPDATA%\resterm - Linux/Unix:
~/.config/resterm
- macOS:
컬렉션
워크스페이스를 Git 친화적인 번들로 내보내고 다른 워크스페이스로 가져올 수 있습니다. 번들에는 체크섬이 포함된 manifest.json이 포함되어 있어 가져오기 시 파일 무결성을 먼저 검증합니다. 환경 값은 REPLACE_ME 자리 표시자로 내보내지므로 비밀 값이 머신을 벗어나지 않습니다.
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
가져오기 미리보기에는 --dry-run을, 기존 파일 덮어쓰기에는 --force를 추가하세요. 문서: 컬렉션 공유.
Curl 가져오기
편집기에 curl 명령을 붙여넣고 Ctrl+Enter를 누르면 구조화된 요청으로 변환됩니다. Resterm은 일반적인 플래그를 이해하고, 반복되는 데이터 세그먼트를 병합하며, 멀티파트 업로드를 그대로 유지합니다. sudo나 $ 같은 셸 접두사는 무시됩니다. CLI도 --from-curl로 동일한 변환을 수행합니다.
다음 입력은:
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
--user demo:secret \
-d '{"user":"demo"}'
이렇게 변환됩니다:
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
RestermScript
RestermScript(RTS)는 Resterm을 위해 만들어진 작은 표현 언어입니다. 요청 형식, 워크플로우 및 지시문을 직접 대상으로 하여 스크립트를 짧고 예측 가능하게 유지합니다. 더 필요한 경우 JavaScript 훅을 계속 사용할 수 있습니다.
간단한 예제(RTS 모듈 + 요청):
// rts/helpers.rts
module helpers
export fn authHeader(token) {
return token ? "Bearer " + token : ""
}
# @use ./rts/helpers.rts
# @when env.has("feature")
# @assert response.statusCode == 200
GET https://api.example.com/users/{{= vars.get("user") }}
Authorization: {{= helpers.authHeader(vars.get("auth.token")) }}
전체 참조: docs/restermscript.md.
심층 분석
OAuth 2.0
클라이언트 자격 증명, 비밀번호 권한 부여 및 PKCE 인증 코드를 지원합니다. 인증 코드 흐름의 경우 Resterm은 브라우저를 열고 127.0.0.1에서 로컬 콜백 서버를 실행한 후 리디렉션을 캡처하여 코드를 교환합니다. 토큰은 환경별로 캐시되며 만료되면 갱신됩니다. 문서: docs/resterm.md#oauth-20-directive 및 _examples/oauth2.http.
워크플로우 및 스크립팅
@workflow와 @step으로 요청을 연결하고, 단계 간에 데이터를 전달하며, 필요할 때 JS 훅을 추가합니다. 문서 및 샘플: docs/resterm.md#workflows 및 _examples/workflows.http.
실행 비교
@compare 또는 --compare로 여러 환경에서 동일한 요청을 실행한 다음, g+c로 응답을 나란히 비교합니다. 문서: docs/resterm.md#compare-runs.
트레이싱 및 타임라인
예산과 함께 @trace를 추가하여 DNS, 연결, TLS, TTFB 및 전송 타이밍을 캡처합니다. Resterm은 초과 시간을 강조하고 스팬을 OpenTelemetry로 내보낼 수 있습니다. 문서: docs/resterm.md#timeline--tracing.
스트리밍(WebSocket 및 SSE)
@websocket을 @ws 단계와 함께 사용하거나 @sse로 스트림을 스크립팅하고 기록합니다. Stream 탭은 트랜스크립트를 보관하고 대화형 콘솔을 포함합니다. 문서: docs/resterm.md#streaming-sse--websocket.
gRPC
트랜스크립트, 메타데이터 및 본문 확장을 지원하는 단항(Unary) 및 스트리밍 호출. 문서: docs/resterm.md#grpc.
OpenAPI 가져오기
--from-openapi를 사용하여 로컬 파일 또는 http(s) URL에서 OpenAPI 3 스펙을 .http 컬렉션으로 변환합니다. 생성할 블록은 --openapi-mode requests, mocks 또는 both로 선택합니다. 원격 가져오기는 전역 --insecure 및 --proxy 플래그를 따릅니다. 문서: docs/cli.md#import-examples.
SSH 터널
@ssh 프로파일로 배스천 호스트를 통해 HTTP, gRPC, WebSocket 및 SSE 트래픽을 라우팅합니다. 문서: docs/resterm.md#ssh-tunnels 및 _examples/ssh.http.
Kubernetes 포트 포워딩
@k8s 프로파일로 동일한 개념을 적용하며, 파드, 서비스, 디플로이먼트 또는 스테이트풀셋을 대상으로 합니다. 문서: docs/resterm.md#kubernetes-port-forwards 및 _examples/k8s.http.
테마 및 바인딩
구성 디렉터리의 themes/*.toml 및 bindings.toml 또는 bindings.json으로 색상과 키 바인딩을 사용자 지정할 수 있습니다. 문서: docs/resterm.md#theming 및 docs/resterm.md#custom-bindings.
문서
docs/resterm.md는 요청 구문, 지시문, 스크립팅 및 전송 방식을 다룹니다.docs/cli.md는resterm run, 가져오기 도구, 컬렉션 및 기록을 다룹니다.- 호환성은 v1에 대한 Resterm의 호환성 보장을 설명합니다.
TUI 내부에서 ?를 누르거나 :help를 실행하세요. 설치된 릴리스의 전체 웹 매뉴얼이 필요하면 :docs를 사용하세요.