재작성 규칙과 스크립트

재작성 규칙으로 기기에서 API를 Mock, 리디렉션, 지연, 수정할 수 있습니다. 규칙으로 안 되는 동적 처리는 JavaScript 스크립트로 가로챕니다.

스크립트 작성은 스크립트 가이드.


목차

  1. 범위 (Scope)
  2. 재작성 규칙
  3. JavaScript 스크립트

1. 범위 (Scope)

범위는 규칙이나 스크립트가 어디까지 적용되는지를 정합니다. Host + Path. Host는 필수, Path는 선택입니다.

  • Host: 그 Host의 모든 요청에 적용됩니다. 퍼지 매칭입니다. 메인 도메인만 넣으면(예: example.com) 서브도메인도 맞습니다. 캡처된 Host를 드롭다운에서 고르거나 직접 입력합니다.
  • Path(선택): 넣으면 그 API에만 적용됩니다. Path는 접두사만 지원합니다(* 와일드카드는 쓰지 마세요). /api/v1이면 /api/v1/users, /api/v1/orders가 맞습니다. Host를 고른 뒤 목록에서 API를 선택하면(Method와 Path가 채워짐) 되고, 경로를 직접 입력해도 됩니다.

: 기존 API를 고르면 Method와 Path가 채워집니다. 재작성 규칙이면 Mock 템플릿이나 Headers도 미리 채워집니다.


2. 재작성 규칙

프론트와 백을 같이 만들 때는 API가 아직 없거나, 오류 상태 코드를 시험해야 할 때가 많습니다. 재작성으로 Mock과 경계 테스트를 합니다. 적용 범위는 1. 범위.

2.1 Rewrite Action

  • 리디렉션 (Redirect): 다른 주소로 보냅니다(프로덕션 → Localhost 또는 스테이징).
  • Mock: 네트워크로 나가지 않고 준비한 JSON/XML, 상태(404, 500 등), 헤더, 본문을 반환합니다.
  • 삭제 (Drop):
    • 요청 삭제: 요청이 나가지 못한 상태(오프라인).
    • 응답 삭제: 요청은 나가지만 응답이 없음(타임아웃).
  • 지연 (Delay): 지연을 넣어 느린 망에서 Loading을 봅니다.
  • 수정 (Modify):
    • Header: 테스트 Token을 넣거나 User-Agent를 바꿉니다.
    • Body 교체: 요청/응답 Body 전체를 바꿉니다.
    • 정규식으로 Body 교체: JSON 필드만 고칩니다. 예: "status": "pending""status": "success".

안 될 때

  • 규칙이 안 먹힘: 나중에 넣은, 우선순위가 더 높은 규칙이 이깁니다.
  • 정규식이 안 맞음: JSON에는 공백과 들여쓰기가 많습니다. 공백을 안 보면(\s* 등) 실패합니다. 내장 「테스트」로 식을 확인하세요.

3. JavaScript 스크립트

타임스탬프 서명, 데이터 조립처럼 계산이 필요한 Mock은 스크립트가 맞습니다. 범위 정하는 법은 재작성과 같습니다. 1. 범위.

3.1 도구

손코딩 말고도 만들고 확인할 수단이 있습니다.

  • AI 생성: 말로 지시하면 됩니다(예: 「응답의 price9.9로 바꾸고 discount_tag: true를 넣어줘」). 표준 JS가 채워집니다.
  • Test Script: 저장하기 전에 기록에 있는 실제 요청으로 돌려 봅니다. 전후 비교와 오류가 나옵니다. 스크립트에서 console.log를 쓰고 Logs 페이지에서 로그를 보며 문제를 나눌 수도 있습니다.
  • Remote Script: 공개 http:// / https:// URL을 붙입니다. 기기에서 받아 실행합니다. 팀에서 같은 Mock을 나눠 쓸 때 유용합니다.

3.2 수명 주기 함수

작성 방법: 스크립트 가이드

아래 함수만 구현하면 됩니다.

// 나가는 요청
function interceptRequest(request) {
    // request.method, request.url, request.headers, request.body, request.queryParams
    if (request.path === '/api/v1/test') {
        request.headers['X-Debug-Token'] = 'test_token';
    }
    // 반환: passthrough, modify, mock, drop
    return { action: 'modify', request: request };
}

// 들어오는 응답
function interceptResponse(request, response) {
    // response.statusCode, response.headers, response.body
    if (response.body) {
        var data = safeJsonParse(response.body); // 내장 안전 JSON 파싱
        if (data) {
            data.mock_field = true;
            response.body = JSON.stringify(data);
            return { action: 'modify', response: response };
        }
    }
    return { action: 'passthrough' };
}

3.3 내장 API

  • localStore: 요청을 넘나들며 상태를 유지합니다. 로그인에서 인가를 저장하고 이후 API에 넣는 식입니다.
    • localStore.write('session_id', 'abc')
    • var t = localStore.read('session_id')
  • httpClient: 스크립트 실행 중에 추가로 HTTP를 보냅니다(외부 상태 동기화, 설정 가져오기).
    • var res = httpClient.get('https://api.ipify.org')

안 될 때

  • 구문·런타임 오류: Test Script로 확인. console.log("...")는 Logs 페이지에 나옵니다.
  • 수명 주기: 우선순위가 더 높은 재작성이 이미 Mock/Drop 했으면, 그 요청에서는 스크립트가 돌지 않습니다.