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?


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.