재작성 규칙과 스크립트

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

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


목차

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

1. 범위 (Scope)

범위는 규칙이나 스크립트가 어디까지 적용되는지를 정합니다. Host + Path + Method. Host는 필수, Path와 Method는 선택입니다. Host를 고른 뒤 목록에서 API를 선택하면(Method와 Path가 채워짐) 되고, Path를 직접 입력한 뒤 Method를 지정해도 됩니다.

일치 방식은 App 버전에 따라 다릅니다. 새 일치는 3.17부터입니다.

1.1 3.17 이상

항목목록에서 선택직접 입력
Host정확 일치와일드카드
Path정확 일치와일드카드
Method정확 일치(API와 함께 입력)정확 일치; ALL = Method 제한 없음

와일드카드: * = 임의 길이(빈 문자열 포함), ? = 한 문자. * / ?가 없으면 정확 일치입니다.

설정일치불일치
/yyy/yyy/api/yyy, /yyyy, /yyy/z
/yyy*/yyy, /yyyy, /yyy/z/api/yyy
*/yyy/yyy, /api/yyy/yyyy
/yyy/*/yyy/z/yyy
example.comexample.comapi.example.com
*.example.comapi.example.comexample.com

호환: 3.17 이전에 만든 규칙의 Host/Path는 포함 일치(contains) 입니다(example.com은 api.example.com에도 맞습니다). 편집 화면에 경고가 뜹니다. 범위를 바꾸지 않고 저장하면 contains가 유지됩니다. 범위를 바꾼 뒤 저장하면 3.17의 새 규칙으로 기록됩니다.

1.2 3.17 미만

  • Host: 해당 Host의 요청에 적용됩니다. Host는 퍼지(포함) 일치입니다. 메인 도메인만 넣으면 서브도메인도 맞습니다(예: example.com은 api.example.com에도 맞음). 캡처된 Host를 드롭다운에서 고르거나 직접 입력합니다.
  • Path(선택): 넣으면 그 API에만 적용됩니다. Path는 접두사 일치만 지원합니다(* 와일드카드는 쓰지 마세요). /api/v1은 /api/v1/users와 /api/v1/orders에 맞습니다.
  • Method(선택): 목록에서 API를 고르면 자동으로 들어가며, 해당 HTTP 메서드에 정확 일치합니다.

팁: 기존 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 생성: 말로 지시하면 됩니다(예: 「응답의 price를 9.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 했으면, 그 요청에서는 스크립트가 돌지 않습니다.