GraphQL'de "kenarlar" ve "düğüm" ne anlama geliyor?


104

Belirli bir GraphQL uç noktası kullanıyorum ve sorgu olarak temiz bir JSON yapısı sağlamama rağmen, sonuçları aldığımda "edge" ve "node" etiketleri alıyorum. Görünüşe göre verilerimi belirgin bir faydası olmadan kirletiyor. Verilerin daha hızlı ve daha basit ayrıştırılması için neden var ve bunlardan kurtulmak mümkün mü?


1
Bağlantılar, kenarlar ve düğümler, temel olarak GraphQL istemcisi olan Relay bağlamında kullanılan bir terminolojidir. Bu SSS'de daha fazla bilgi bulunabilir .
marktani

2
Sadece açıklığa kavuşturmak için: bağlantılar Relay'e özgü değildir. Ayrıntılı bir bakış için şu makaleye bakın: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer

Uzun sonuç listeleri için sayfalama sağlamanın standart bir yolu. Herhangi bir uygulamaya bağlı değil.
Matt

Yanıtlar:


63

Basit kelimelerle kısa bir girişle başlayalım


GraphQl Röle özellikleri

  • bir nesneyi yeniden yerleştirme mekanizması
  • bağlantılar üzerinden nasıl sayfa çevirileceğinin açıklaması
  • onları tahmin edilebilir kılmak için mutasyonlar etrafında yapı

Bağlantılar:

  • bağlantı edges, pageInfo... gibi meta verilere sahip nesnelerin bir koleksiyonudur.
  • pageInfo içerecektir hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage daha fazla kenar olup olmadığını veya bu bağlantının sonuna ulaştığımızı söyleyecektir.
  • Kayıt dizisi: kenarlar

    • kenarlar, verilerinizi (düğüm) kullanma esnekliği sağlar
    • kenarlar size sayfalandırma için yardımcı olacaktır, Graphql vardır, GraphQLListancak sayfalandırma gibi işlevselliği yoktur, yalnızca nesneler dizisi (veriler) ile
  • Her kenarda

    • a node: bir kayıt veya veri
    • a cursor: sayfalandırma ile röleye yardımcı olmak için base64 kodlu dize

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

Düğüm:

  • aktarıcıyı kullanarak göstermeniz gereken düğüm sayısını ayarlayabilirsiniz connectionArgs(first, last, after, before)

Relay Pagination şu şekilde çalışır:

  • Koleksiyondaki tüm nesneleri alır ve first/lastconnectionArgs aracılığıyla kullanılan x kayıtlarına göre bir dilim döndürür

  • after/before Düğümdeki imleci kullanarak GraphQL sunucusuna gerekli dilim (veri) sayısını belirtmek için kullanılır

Gibi düşünmeye daha birçok şey vardır nodeDefinitions, globalFieldId,nodeInterfaces

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


17
Bence bu cevabın özü var, ancak birçok yanlış anlama içeriyor. Bu makale GraphQL bağlantılarının arkasındaki mantığı oldukça iyi açıklıyor: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer

6
yanlış anlamaları nerede buluyorsunuz, bu sadece kısa bilgiler, herhangi bir yanlış anlama bulursanız, daha iyi hale getirmek için her zaman iyileştirebilirsiniz
p0k8_

Graphql UI aracılığıyla bu yapılarla çalışabilir miyim ? Örneğin hasNextPage , yoksa yalnızca Relay ile JS üzerinden mi kullanılabilirler?
Ska

evet, graphiql kullanıcı arayüzünden graphql-röle
p0k8_

değil each node will have a cursor, daha ziyade each edge will have a cursor, o bkz blog.apollographql.com/...
rüzgarı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.