본문 바로가기

배움의 즐거움/프로그래밍

(27) Graphql-ruby - Non-Null 타입

반응형





Non-Null Types


GraphQL 에서 non-null 은  !로 표현된다.

type User {
  # T이 필드는 항상 String을 리턴하지만 절대로 null을 리턴하지는 않는다
  handle: String!
  # `DateTime` 값은 반드시 전달되어야 하며, 생략되거나 `null`을 패스할 수는 없다
  followers(since: DateTime!): [User!]!
}

Ruby에서는 이 개념이 필드에서는 null:, argument에서는 required: 라고 표현된다.


Non-null return types

위에서의 handle: String!처럼 !이 필드 리턴타입에 사용되었을 경우, 이는 필드가 절대로 nil을 리턴하지 못한다는 것을 뜻한다.

non-null 필드를 만들기 위해서는  null: false 를 필드 정의에 추가하면 된다.

# 위의 `handle: String!` 와 같음
field :handle, String, null: false

이 것은 해당 필드는 nil 이 될 수 없음을 뜻하고, 만약 nil이라면 아래와 같은 이유로 인해 응답에서 나타나지 않을 것이다.


Non-null error propagation


만약 non-null 필드가 nil을 리턴한다면, 모든 selection 은 응답으로부터 제거되고, nil로 대체될 것이다. 만약 해당 제거가 또 다른 무효한 nil의 결과를 낳는다면, 이는 이를 타고 올라가서 루트 "data" 키에 다다를 때까지 진행될 것이다. 이 것은 타입 언어에서 클라이언트를 지원하기 위해서 이다. non-null 필드는 절대로 null 을 리턴하지 않으며, 클라이언트 개발자는 그것에 의존해도 된다.


Non-null argument types



! 이 argument 에서 사용되었을 때(위의 followers(since: DateTime!) 처럼), 이 것은 argument가 쿼리 실행을 위해서 반드시 필요한 것이라는 것을 뜻한다. 해당 값이 없는 쿼리는 바로 거절된다.


Ruby 에서 non-null argument를 만들기 위해서는 required: true 를 사용할 수 있다.

# equivalent to `since: DateTime!` above
argument :since, Types::DateTime, required: true

이 것은 since: 값이 없는 쿼리는 거절될 것이라는 것을 뜻한다.


* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.

* 출처: http://graphql-ruby.org/type_definitions/non_nulls.html


반응형