Di GraphQL apa arti dari “edge” dan “node”?

104

Saya menggunakan titik akhir GraphQL tertentu dan meskipun saya menyediakan struktur JSON yang bersih sebagai kueri, ketika saya mendapatkan hasil, saya mendapatkan tag "edge" dan "node". Sepertinya itu mencemari data saya tanpa manfaat yang jelas. Mengapa itu ada dan apakah mungkin untuk menyingkirkannya untuk penguraian data yang lebih cepat dan lebih sederhana?

Ska
sumber
1
Koneksi, tepi, dan node adalah terminologi yang terutama digunakan dalam konteks Relay, klien GraphQL. Informasi lebih lanjut dapat ditemukan di FAQ ini .
marktani
2
Hanya untuk memperjelas: koneksi bukanlah hal khusus Relay. Untuk melihat lebih dalam, lihat artikel ini: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer
Ini merupakan cara standar untuk menyediakan paging untuk daftar hasil yang panjang. Tidak terikat dengan implementasi apa pun.
Matt

Jawaban:

64

Mari kita mulai dengan pengantar singkat dengan kata-kata sederhana


Spesifikasi GraphQl Relay

  • mekanisme untuk mengambil kembali suatu objek
  • deskripsi tentang cara membuka halaman melalui koneksi
  • struktur di sekitar mutasi agar dapat diprediksi

Koneksi:

  • koneksi adalah kumpulan objek dengan metadata seperti edges, pageInfo...
  • pageInfo akan berisi hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage akan memberi tahu kami jika ada lebih banyak edge yang tersedia, atau jika kami telah mencapai akhir dari koneksi ini.
  • Array catatan: tepi

    • edge akan memberi Anda fleksibilitas untuk menggunakan data (node) Anda
    • edge akan membantu Anda untuk pagination, Ada graphql GraphQLListtetapi tanpa fungsi seperti pagination, hanya dengan array objek (data)
  • Setiap sisi memiliki

    • a node: catatan atau data
    • a cursor: string yang dikodekan base64 untuk membantu menyampaikan dengan pagination

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

Node:

  • Anda dapat mengatur jumlah node yang perlu Anda tampilkan menggunakan relai connectionArgs(first, last, after, before)

Paginasi Relai berfungsi sebagai

  • Mengambil semua objek dalam koleksi dan mengembalikan potongan berdasarkan first/lastcatatan x, digunakan melalui connectionArgs

  • after/before digunakan untuk menunjukkan ke server GraphQL jumlah potongan (data) yang diperlukan menggunakan kursor dari node

Ada banyak hal yang perlu dipertimbangkan seperti nodeDefinitions, globalFieldId,nodeInterfaces

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

p0k8_
sumber
17
Saya pikir jawaban ini memiliki intinya, tetapi mengandung banyak kesalahpahaman. Artikel ini menjelaskan alasan di balik koneksi GraphQL dengan cukup baik: medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer
6
di mana Anda menemukan kesalahpahaman, itu hanya informasi singkat, jika Anda menemukan kesalahpahaman, Anda selalu dapat memperbaikinya agar lebih baik
p0k8_
Dapatkah saya bekerja dengan konstruksi ini melalui graphql UI? Misalnya hasNextPage , atau apakah mereka hanya tersedia melalui JS dengan Relay?
Ska
ya, Anda dapat mengerjakan ini dari graphiql UI menggunakan graphql-relay
p0k8_
bukan each node will have a cursor, sebaliknya each edge will have a cursor, lihat blog itu.apollographql.com/…
angin