스키마 설정
스키마 설정'self' 필드 쿼리하기

'self' 필드 쿼리하기

다른 GraphQL 서버나 REST API와 동일한 응답을 에뮬레이션하기 위해 응답의 형태를 변경해야 하는 경우가 있습니다.

이는 GraphQL 스키마의 모든 타입에 추가된 self 필드를 통해 실현할 수 있습니다. 이 필드는 적용된 객체 자체를 그대로 반환합니다.

type QueryRoot {
  self: QueryRoot!
}
 
type Post {
  self: Post!
}
 
type User {
  self: User!
}

작동 방식

self 필드를 사용하면 쿼리 대상 객체를 벗어나지 않고 쿼리에 추가적인 레벨을 덧붙일 수 있습니다. 다음 쿼리를 실행하면:

{
  __typename
  self {
    __typename
  }
  
  post(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
  
  user(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
}

...다음과 같은 응답이 반환됩니다.

{
  "data": {
    "__typename": "QueryRoot",
    "self": {
      "__typename": "QueryRoot"
    },
    "post": {
      "self": {
        "id": 1,
        "__typename": "Post"
      }
    },
    "user": {
      "self": {
        "id": 1,
        "__typename": "User"
      }
    }
  }
}

사용 방법

self를 사용하여 응답에 필요한 추가적인 레벨을 인위적으로 추가하고, 필드 별칭을 사용하여 해당 레벨에 적절한 이름을 지정합니다.

예를 들어, 다음 쿼리는 다른 GraphQL 서버의 형태를 재현합니다.

{
  categories: self {
    edges: postCategories {
      node: self {
        name
        slug
      }
    }
  }
}

다음 쿼리는 WP REST API의 형태를 재현합니다.

{
  post(by: {id: 1}) {
    content: self {
      rendered: content
    }
  }
}

엔드포인트에 self 필드 추가하기

스키마에 self 필드를 추가하는 것은 우선순위 순서에 따라 다음과 같이 설정할 수 있습니다.

✅ 스키마 설정에서 정의된 커스텀 엔드포인트 또는 persisted query의 특정 모드

Adding self fields to the schema, set in the Schema configuration

✅ 설정에서 정의된 기본 모드

스키마 설정의 값이 "Default"인 경우, 설정에서 정의된 모드가 사용됩니다.

설정 화면에서 스키마 설정의 self 필드 구성
설정 화면에서 스키마 설정의 self 필드 구성

사용 시기

self 필드는 다른 GraphQL 서버나 REST API처럼 특정 요구 형태에 맞게 GraphQL 응답의 형태를 조정하는 데 사용할 수 있습니다.