Buku "GraphQL: Bahasa Query untuk Aplikasi Web Modern"

gambar Hai, habrozhiteli! Kami telah menerbitkan buku tentang bahasa permintaan GraphQL. Kami memutuskan untuk membagikan terjemahan bab "Anatomi Kueri GraphQL"

Snowtooth adalah resor ski fiksi. Demi contoh-contoh dalam bab ini, kami akan berpura-pura bahwa ini adalah gunung yang nyata dan kami bekerja di sana. Kami akan melihat bagaimana tim web Snow Fang menggunakan GraphQL untuk memberikan informasi real-time: informasi tentang status lift ski dan jalur ski. Snow Fang Ski Patrol dapat membuka dan menutup lift dan lereng ski langsung dari smartphone Anda. Untuk mengikuti contoh dalam bab ini, lihat antarmuka Snow Fang di platform GraphQL Playground (snowtooth.moonhighway.com/).


Anda dapat menggunakan operasi kueri untuk meminta data dari API. Kueri menjelaskan data yang ingin Anda terima dari server GraphQL. Saat Anda mengirim permintaan, Anda meminta unit data menurut bidang. Bidang-bidang ini ditampilkan di bidang yang sama dalam respons data JSON yang Anda terima dari server. Misalnya, jika Anda mengirim permintaan allLifts dan meminta bidang nama dan status, Anda harus mendapatkan respons JSON yang berisi larik allLifts dan string nama dan status dari setiap lift, seperti yang ditunjukkan di sini:

query { allLifts { name status } } 

Menangani kesalahan
Permintaan yang berhasil mengembalikan dokumen JSON yang berisi kunci data. Permintaan yang gagal mengembalikan dokumen JSON yang berisi kunci kesalahan. Detail tentang apa yang salah dikirimkan sebagai data JSON di bawah kunci ini. Respons JSON dapat berisi "data" dan "kesalahan".

Anda dapat menambahkan beberapa kueri ke dokumen kueri, tetapi hanya satu operasi yang dapat dimulai pada satu waktu. Misalnya, Anda bisa menempatkan dua operasi permintaan dalam dokumen permintaan:

 query lifts { allLifts { name status } } query trails { allTrails { name difficulty } } 

Ketika Anda mengklik tombol putar, GraphQL Playground meminta Anda untuk memilih salah satu dari dua operasi ini.

Jika Anda ingin mengirim satu permintaan untuk semua data yang ditentukan, Anda harus memasukkan semuanya ke dalam permintaan yang sama:

 query liftsAndTrails { liftCount(status: OPEN) allLifts { name status } allTrails { name difficulty } } 

Berikut adalah manfaat dari GraphQL. Kami dapat menerima berbagai jenis data dalam satu permintaan. Kami meminta liftCount berdasarkan status, yang memungkinkan kami mengetahui jumlah lift yang saat ini memiliki status ini. Kami juga meminta nama dan status setiap lift. Akhirnya, kami meminta nama dan status setiap jejak.

permintaan adalah jenis GraphQL. Kami menyebutnya tipe root karena ini adalah tipe yang memetakan ke operasi, dan operasi adalah akar dari dokumen permintaan kami. Bidang yang tersedia untuk kueri di API GraphQL ditentukan dalam skema API ini. Dokumentasi menunjukkan bidang mana yang tersedia untuk dipilih dalam tipe permintaan.

Dokumentasi memberi tahu kita bahwa kita dapat memilih bidang liftCount, allLifts, dan allTrails saat memanggil API ini. Itu juga mendefinisikan lebih banyak bidang yang tersedia untuk seleksi, tetapi inti dari permintaan adalah bahwa kita dapat memilih bidang mana yang kita butuhkan dan yang perlu kita hilangkan.

Saat kami menulis kueri, kami memilih bidang yang kami butuhkan, melampirkannya dalam kurung kurawal. Blok-blok ini disebut sampel. Kolom yang kami tentukan dalam seleksi terkait langsung dengan tipe GraphQL. Bidang liftCount, allLifts, dan allTrails didefinisikan dalam tipe kueri.

Anda dapat menyematkan banyak pilihan satu sama lain. Karena bidang allLifts mengembalikan daftar Angkat, kita perlu menggunakan kurung kurawal untuk membuat pilihan baru untuk jenis ini. Ada semua jenis data yang dapat kami minta tentang lift, tetapi dalam contoh ini kita hanya perlu nama dan status lift. Demikian pula, permintaan allTrails akan mengembalikan tipe Trail.

Respons JSON berisi semua data yang kami minta. Data ini diformat sebagai JSON dan dikirimkan dalam bentuk yang sama dengan permintaan kami. Setiap bidang JSON diberi nama yang sama dengan bidang dalam sampel kami. Kami dapat mengubah nama bidang di objek respons dalam permintaan dengan menetapkan alias, seperti yang ditunjukkan di bawah ini:

 query liftsAndTrails { open: liftCount(status: OPEN) chairlifts: allLifts { liftName: name status } skiSlopes: allTrails { name difficulty } } 

Berikut ini jawabannya:

 { "data": { "open": 5, "chairlifts": [ { "liftName": "Astra Express", "status": "open" } ], "skiSlopes": [ { "name": "Ditch of Doom", "difficulty": "intermediate" } ] } } 

Sekarang kami mengembalikan data dalam bentuk yang sama, tetapi dalam jawaban kami, kami mengganti nama beberapa bidang. Cara untuk memfilter hasil permintaan GraphQL adalah dengan memberikan argumen permintaan. Argumen adalah sepasang nilai kunci (atau pasangan) yang terkait dengan bidang permintaan. Jika hanya nama lift tertutup yang diperlukan, kami dapat mengirim argumen yang akan memfilter jawaban kami:

 query closedLifts { allLifts(status: "CLOSED" sortBy: "name") { name status } } 

Anda juga dapat menggunakan argumen untuk memilih data. Sebagai contoh, misalkan kita perlu meminta status jalur kabel individual. Kita dapat memilih lift dengan pengidentifikasi uniknya:

 query jazzCatStatus { Lift(id: "jazz-cat") { name status night elevationGain } } 

Di sini kita melihat bahwa jawabannya berisi nama, status, malam dan elevasi Keuntungan untuk mobil kabel Jazz Cat.

»Informasi lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
» Isi
» Kutipan

Kupon diskon 25% untuk penjaja - GraphQL

Setelah pembayaran versi kertas buku, versi elektronik buku dikirim melalui email.

Source: https://habr.com/ru/post/id441194/


All Articles