재작성 규칙과 스크립트
재작성 규칙으로 기기에서 API를 Mock, 리디렉션, 지연, 수정할 수 있습니다. 규칙으로 안 되는 동적 처리는 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.com | example.com | api.example.com |
*.example.com | api.example.com | example.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 했으면, 그 요청에서는 스크립트가 돌지 않습니다.