Jakie jest znaczenie „krawędzi” i „węzła” w GraphQL?

103

Używam określonego punktu końcowego GraphQL i chociaż dostarczam czystą strukturę JSON jako zapytanie, kiedy otrzymuję wyniki, otrzymuję tagi „krawędzi” i „węzła”. Wygląda na to, że zanieczyszcza moje dane bez oczywistych korzyści. Dlaczego tam jest i czy można się ich pozbyć w celu szybszego i prostszego analizowania danych?

Ska
źródło
1
Połączenia, krawędzie i węzły to terminologia używana głównie w kontekście Relay, klienta GraphQL. Więcej informacji można znaleźć w tym FAQ .
marktani
2
Dla wyjaśnienia: połączenia nie są specyficzne dla przekaźników. Aby uzyskać szczegółowe informacje, zobacz ten artykuł: medium.com/p/explaining-graphql-connections-c48b7c3d6976
pomocnik,
To trochę standardowy sposób na stronicowanie długich list wyników. Nie związany z żadną implementacją.
Matt,

Odpowiedzi:

64

Zacznijmy od krótkiego wprowadzenia prostymi słowami


Dane techniczne przekaźnika GraphQl

  • mechanizm ponownego pobierania obiektu
  • opis sposobu przeglądania połączeń
  • struktury wokół mutacji, aby były przewidywalne

Znajomości:

  • połączenie jest zbiorem obiektów metadanych, takich jak edges, pageInfo...
  • pageInfo będzie zawierać hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage powie nam, czy jest więcej dostępnych krawędzi, czy też osiągnęliśmy koniec tego połączenia.
  • Tablica rekordów: krawędzie

    • krawędzie zapewniają elastyczność korzystania z danych (węzeł)
    • krawędzie pomogą ci w paginacji, jest graphql GraphQLListale bez funkcjonalności takiej jak paginacja, tylko z tablicą obiektów (danych)
  • Każda krawędź ma

    • a node: rekord lub dane
    • a cursor: ciąg zakodowany w base64, aby pomóc w przekazywaniu z paginacją

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

Węzeł:

  • możesz ustawić liczbę węzłów, które chcesz pokazać za pomocą przekaźnika connectionArgs(first, last, after, before)

Relay Pagination działa jako

  • Pobiera wszystkie obiekty w kolekcji i zwraca wycinek na podstawie first/lastrekordów x używanych przez connectionArgs

  • after/before służą do wskazywania serwerowi GraphQL liczby wymaganego wycinka (danych) za pomocą kursora z węzła

Istnieje wiele innych rzeczy do rozważenia, jak nodeDefinitions, globalFieldId,nodeInterfaces

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

p0k8_
źródło
17
Myślę, że ta odpowiedź ma sens, ale zawiera wiele nieporozumień. Ten artykuł dość dobrze wyjaśnia powód połączeń GraphQL: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer
6
gdzie znajdujesz nieporozumienia, to tylko krótka informacja, jeśli znalazłeś jakieś nieporozumienia, zawsze możesz je poprawić, aby było lepiej
p0k8_
Czy mogę pracować z tymi konstrukcjami za pośrednictwem interfejsu użytkownika Graphql ? Na przykład hasNextPage , czy są one dostępne tylko przez JS z Relay?
Ska,
tak, możesz nad nimi pracować z graficznego interfejsu użytkownika za pomocą przekaźnika
graphql
each node will have a cursorraczej nie odsyłajeach edge will have a cursor tego blog.apollographql.com/…
wiatr