REST와 GraphQL 매핑 원리
REST API는 리소스 경로와 HTTP 메서드 조합으로 동작합니다. GET /users/123은 ID 123의 사용자 조회, POST /users는 생성, PUT /users/123은 수정, DELETE /users/123은 삭제입니다. GraphQL은 같은 작업을 단일 엔드포인트(/graphql)에서 쿼리(읽기)와 뮤테이션(쓰기)으로 표현합니다.
본 도구는 REST URL의 경로 파라미터(/users/:id), 쿼리스트링(?fields=id,name), 메서드를 분석해 동등한 GraphQL 작업을 제안합니다. 반대 방향도 가능합니다: GraphQL 쿼리의 루트 필드명과 인자를 보고 REST cURL 명령을 생성합니다.
매핑 규칙
- GET /resource/:id →
query { resource(id) { ...fields } } - GET /resources?limit=10 →
query { resources(limit: 10) { ... } } - POST /resources →
mutation { createResource(input) { ... } } - PUT/PATCH /resource/:id →
mutation { updateResource(id, input) { ... } } - DELETE /resource/:id →
mutation { deleteResource(id) } - ?fields=id,name → Selection set:
{ id name } - ?page=2&limit=20 →
(offset: 20, limit: 20)또는 cursor 페이지네이션
자주 묻는 질문 (FAQ)
Q. REST가 GraphQL보다 항상 단점인가요?
A. 아닙니다. 캐시(HTTP 캐시), 단순함, CDN 친화성에서는 REST가 유리합니다. GraphQL은 클라이언트가 필드를 선택할 수 있어 모바일·다양한 화면 대응에 강합니다. 상황에 맞춰 쓰세요.
Q. 페이지네이션은 어떻게 변환되나요?
A. ?offset=0&limit=10(offset 기반)은 GraphQL에서도 동일 인자로 표현하거나, Relay 스타일 cursor 기반(first: 10, after: "cursor")으로 옮길 수 있습니다.
Q. 헤더와 인증은 어떻게 처리하나요?
A. 두 방식 모두 HTTP 헤더를 그대로 사용합니다. Authorization: Bearer ...는 GraphQL 요청에도 동일하게 적용됩니다. 본 도구는 헤더를 결과 코드에 포함시킵니다.