재작성 규칙과 스크립트
재작성 규칙으로 기기에서 API를 Mock, 리디렉션, 지연, 수정할 수 있습니다. 규칙으로 안 되는 동적 처리는 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 생성: 말로 지시하면 됩니다(예: 「응답의
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 했으면, 그 요청에서는 스크립트가 돌지 않습니다.