반응형
Enums
Enum 타입은 분리된 값들의 집합이다. enum 필드는 반드시 enum 값들 중 하나의 가능한 값을 리턴해야 한다. GraphQL Schema Definition Language(SDL) 에서는 enum은 다음과 같이 표현된다.
enum MediaCategory {
AUDIO
IMAGE
TEXT
VIDEO
}
즉, MediaCategory값은 AUDIO
, IMAGE
, TEXT
, VIDEO
중에 하나이다. 이것은 ActiveRecord enums 과 비슷하다.
GraphQL 쿼리에서, enum은 문자열이 아니라 identifier로 씌여진다. 예를 들어
search(term: "puppies", mediaType: IMAGE) { ... }
(IMAGE
가 따옴표가 없는 것을 보아라.)
그러나 GraphQL 응답 또는 변수들은 JSON을 사용하여 전해지기 때문에 Enum 값들은 문자열로 보여진다. 예를 들어:
# graphql 컨트롤러에서는:
params["variables"]
# { "mediaType" => "IMAGE" }
Defining Enum Types
너의 어플리케이션에서 enum은 GraphQL::Schema::Enum
를 extend 하고 value(...)
메서드를 이용해서 정의된다.
# 베이스 클래스 정의
# app/graphql/types/base_enum
class Types::BaseEnum < GraphQL::Schema::Enum
end
# app/graphql/types/media_category.rb
class Types::MediaCategory < Types::BaseEnum
value "AUDIO", "An audio file, such as music or spoken word"
value "IMAGE", "A still image, such as a photo or graphic"
value "TEXT", "Written words"
value "VIDEO", "Motion picture, may have audio"
end
각 값들은 다음과 같은 것들을 가질 수 있다:
- description (두번째 argument로, 또는
description:
키워드를 사용할 수 있다.) - deprecation reason (
deprecation_reason:
키워드 사용), 이 값이 사라졌다는 것을 표시 - 상응하는 Ruby 값 (as
value:
), 아래에 더 자세히 나와있다.
디폴트로, Ruby 문자열은 GraphQL enum 값들에 상응한다. 그러나 value: 옵션을 제공할 수 있다. 예를 들어, 문자열 대신 심벌을 사용하고자 한다면 다음과 같이 표현할 수 있다.
value "AUDIO", value: :audio
그러면 GraphQL에 AUDIO는:audio로 변환될 것이고, 루비 값인 :audio는 "AUDIO"로 GrapQL 응답에서 변환될 것이다.
* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.
* 출처: http://graphql-ruby.org/type_definitions/enums.html
반응형
'배움의 즐거움 > 프로그래밍' 카테고리의 다른 글
(24) Graphql-ruby - 인터페이스 (0) | 2019.01.01 |
---|---|
(23) Graphql-ruby - input 객체 (0) | 2019.01.01 |
(21) Graphql-ruby - 스칼라 (0) | 2019.01.01 |
(20) Graphql-ruby - 객체 (0) | 2019.01.01 |
(19) Graphql-ruby - 쿼리에 before/after hook 호출하기 (0) | 2019.01.01 |