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
'배움의 즐거움 > 프로그래밍' 카테고리의 다른 글
(29) Graphql-ruby - Pundit Integration (0) | 2019.01.01 |
---|---|
(28) Graphql-ruby - Authorization 의 모든 것 (0) | 2019.01.01 |
(26) Graphql-ruby - 리스트 (0) | 2019.01.01 |
(25) Graphql-ruby - 유니언 (0) | 2019.01.01 |
(24) Graphql-ruby - 인터페이스 (0) | 2019.01.01 |