객체 프로퍼티 non-null (기본 예시)오류 메세지 예시[string!] : 리스트 내부 값 non-null[string]! : 리스트 non-null[string!]! : 둘 다 non-null
객체 프로퍼티 non-null (기본 예시)
느낌표(!)
를 붙이면 해당 속성에는 반드시 해당 형식의 값을 반환해야함을 의미함.type Character { name: String! appearsIn: [Episode]! }
즉, 서버는 항상 이 필드에 대해 null이 아닌 값을 반환할 것을 기대하며, null값이 발생되면 GraphQL 실행 오류가 발생하고, 클라이언트에게 무언가 잘못되었음을 알립니다.
오류 메세지 예시
{ "errors": [ { "message": "Variable \"$id\" of required type \"ID!\" was not provided.", "locations": [ { "line": 1, "column": 17 } ] } ] }
[string!] : 리스트 내부 값 non-null
myField: [String!]
: 배열 자체는 null일 수 있고, 빈배열일 수도 있지만, 내부요소가 있을 경우에는 반드시 String 타입이어야 한다.
String이 Non-Null이지 list가 Non-Null이 아님을 이해하는 것이 중요하다.
myField: null // valid myField: [] // valid myField: ['a', 'b'] // valid myField: ['a', null, 'b'] // error
List에 대한 Non-Null 선언은 없으므로 반환값 자체가 null이 될 수도 있다.
하지만 배열이 존재하는 경우에는 내부 요소는 반드시 String 형태로 존재해야 한다. ( null 안됨 )
[string]! : 리스트 non-null
myField: [String]!
: 배열 자체는 null일 수 없고, 빈배열일 수도 있고, 내부 요소에 null이 담길 수도 있다.
List에 대해서만 Non-Null이지 내부 값에 대해서 Non-Null은 아님을 이해해야 한다.
myField: null // error myField: [] // valid myField: ['a', 'b'] // valid myField: ['a', null, 'b'] // valid
반드시 List를 반환해야 하므로 null을 반환하면 에러를 뱉는다.
하지만 리스트 내부 값에 대한 Non-Null은 강제되지 않았으므로, 리스트 내부 값은 null이 들어갈 수도 있다.
[string!]! : 둘 다 non-null
myField: [String!]!
: 배열 자체는 null일 수 없고, 빈배열일 수는 있지만, 내부요소가 있을 경우에는 반드시 String 타입이어야 한다.
myField: null // error myField: [] // valid myField: ['a', 'b'] // valid myField: ['a', null, 'b'] // error