2017-10-16 8 views
1

지금 Graphql을 배우고 있으며 튜토리얼을 진행하면서 이해할 수없는 동작을 만났습니다. 의 우리가 스키마 유형을 정의한다고 가정 해 봅시다 : votes: [Vote!]! 해당 필드가 아닌 널 (NULL)이어야하며 배열 자체가 너무 null이해야한다는 것을 의미GraphQL : Null을 허용하지 않는 배열/목록

type Link { 
    id: ID! 
    url: String! 
    description: String! 
    postedBy: User 
    votes: [Vote!]! 
} 

문서로 인해. 그러나 튜토리얼의 저자가 쿼리의 예제를 보여준 직후에 일부 링크의 경우 votes 필드의 빈 배열을 반환합니다. 이처럼 :

{ 
"url": "youtube.com", 
"votes": [] 
}, 
{ 
"url": "agar.io", 
"votes": [] 
} 

그래서 내 질문은 : "비 - 널 (NULL)은"graphQL 스키마에서 "빈"을 의미하지 않거나은 graphQL 서버의 잘못된 행동 (나는 그것이없이 아무것도의 배열을 반환 의미 단지 어떤 종류의 스키마로 인해 뭔가가 있어야한다고 경고 함).

감사합니다.

답변

3

null이 아닌 것은 null이 아닌 소리를 의미합니다. 빈 배열이 null이 아니며 여전히 값을 반환합니다.

declaration accepts: | null | [] | [null] | [{foo: 'BAR'}] 
------------------------------------------------------------------------ 
[Vote!]!    | no | yes | no  | yes 
[Vote]!    | no | yes | yes | yes 
[Vote!]    | yes | yes | no  | yes 
[Vote]    | yes | yes | yes | yes 

[Vote!]! (이 경우 votes에서) 필드는 개인 항목의 그 어느 것도 배열로 해결되지 않는합니다 null를 반환 할 수 없음을 의미합니다 : 여기

는 요약 테이블 해당 배열 내부는 null 일 수 있습니다. 따라서 [][{}][{foo: 'BAR'}]은 모두 유효합니다 ( foo이 0이 아닌 경우). 그러나 다음 던져 : [{foo: 'BAR'}, null]

[Vote]! 필드가 null을 반환 할 수 없음을 의미하지만, 반환 된 목록에서 개별 항목은 널 (null)이 될 수 있습니다.

[Vote!]은 전체 필드가 ​​일 수 있고,이 null이 될 수 있음을 의미하지만 값을 반환하면 배열이 필요하며 해당 배열의 각 항목은 null 일 수 없습니다.

[Vote]은 전체 필드가 ​​일 수 있음을 의미하고은 null이 될 수 있지만 값을 반환하면 배열이 필요합니다. 그러나 배열의 멤버도 null 일 수 있습니다.

배열이 비어 있는지 확인해야하는 경우 확인자 논리 내에서 배열을 비워야합니다. 배열이 비어있을 때 GraphQL을 던지려면 Resolver가 거부 된 Promise를 반환하도록하십시오.

자세한 내용은 GraphQL 소개 list and non-null 장을 참조하십시오.

+0

자습서의 단락으로 인해 혼란 스러웠을 수도 있습니다. _ "[에피소드]!는 에피소드 개체의 배열을 나타내며 null이 허용되지 않으므로 언제든지 배열을 사용할 수 있습니다 (0 개 이상의 항목 포함). appearin 필드를 쿼리하십시오. "_ 감탄 부호가 없으면"0 개 이상의 항목 "을 의미하는 _ 이유가 있으므로 _ 느낌표가 있으면 최소한 1 개의 항목이 있어야합니다. 귀하의 답변 주셔서 감사합니다! – DefLee