[graphql] GraphQL에서 “에지”와 “노드”의 의미는 무엇입니까?

특정 GraphQL 엔드 포인트를 사용하고 있으며 깨끗한 JSON 구조를 쿼리로 제공하고 있지만 결과를 얻으면 “edges”및 “node”태그가 표시됩니다. 명백한 이점없이 내 데이터를 오염시키는 것처럼 보입니다. 왜 거기에 있고 더 빠르고 간단한 데이터 구문 분석을 위해 제거 할 수 있습니까?



답변

간단한 단어로 짧은 소개부터 시작하겠습니다


GraphQl 릴레이 사양

  • 개체를 다시 가져 오는 메커니즘
  • 연결을 통해 페이징하는 방법에 대한 설명
  • 예측 가능하도록 돌연변이 주변의 구조

사이:

  • 연결은 edges, pageInfo… 와 같은 메타 데이터가있는 개체의 모음입니다 .
  • pageInfo이 포함 hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage 사용 가능한 가장자리가 더 있는지 또는이 연결의 끝에 도달했는지 알려줍니다.
  • 레코드 배열 : 가장자리

    • Edge는 데이터 (노드)를 사용할 수있는 유연성을 제공합니다.
    • edge는 페이지 매김에 도움이 될 것입니다. graphql이 GraphQLList있지만 페이지 매김과 같은 기능은없고 객체 배열 (데이터)에만 해당됩니다.
  • 각 모서리에는

    • a node: 레코드 또는 데이터
    • a cursor: 페이지 매김으로 릴레이하는 데 도움이되는 base64 인코딩 문자열

https://facebook.github.io/relay/graphql/connections.htm

마디:

  • 릴레이를 사용하여 표시해야하는 노드 수를 설정할 수 있습니다. connectionArgs(first, last, after, before)

릴레이 페이지 매김은 다음과 같이 작동합니다.

  • 컬렉션의 모든 개체를 가져오고 first/lastconnectionArgs를 통해 사용되는 x 레코드를 기반으로 슬라이스를 반환 합니다.

  • after/before 노드의 커서를 사용하여 필요한 슬라이스 (데이터) 수를 GraphQL 서버에 표시하는 데 사용됩니다.

nodeDefinitions,, globalFieldId등 고려할 사항이 더 많이 있습니다 .nodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification


답변