GraphQL - Skema
Skema GraphQL adalah inti dari implementasi server GraphQL apa pun. Ini menjelaskan fungsionalitas yang tersedia untuk aplikasi klien yang terhubung dengannya. Kita dapat menggunakan bahasa pemrograman apa pun untuk membuat skema GraphQL dan membangun antarmuka di sekitarnya.
Runtime GraphQL mendefinisikan skema berbasis grafik generik untuk mempublikasikan kemampuan layanan data yang diwakilinya. Aplikasi klien dapat menanyakan skema dalam kemampuannya. Pendekatan ini memisahkan klien dari server dan memungkinkan keduanya berkembang dan menskalakan secara mandiri.
Di bab ini, kami menggunakan server Apollo untuk mengeksekusi kueri GraphQL. ItumakeExecutableSchema fungsi di graphql-tools membantu Anda mengikat skema dan resolver.
makeExecutableSchema Function Syntax
Itu makeExecutableSchemafungsi mengambil argumen tunggal {} dari tipe Objek. Sintaks untuk menggunakan fungsi ini diberikan di bawah ini -
import { makeExecutableSchema } from 'graphql-tools';
const jsSchema = makeExecutableSchema({
typeDefs,
resolvers, // optional
logger, // optional
allowUndefinedInResolve = false, // optional
resolverValidationOptions = {}, // optional
directiveResolvers = null, // optional
schemaDirectives = null, // optional
parseOptions = {}, // optional
inheritResolversFromInterfaces = false // optional
});
Sr.No. | Parameter & Deskripsi |
---|---|
1 | typeDefs Ini adalah argumen yang diperlukan. Ini mewakili kueri GraphQL sebagai string UTF-8. |
2 | Resolvers Ini adalah argumen opsional (objek kosong secara default). Ini memiliki fungsi yang menangani kueri. |
3 | logger Ini adalah argumen opsional dan dapat digunakan untuk mencetak kesalahan ke konsol server. |
4 | parseOptions Ini adalah argumen opsional dan memungkinkan kustomisasi parse saat menentukan typeDefs sebagai string. |
5 | allowUndefinedInResolve Ini benar secara default. Ketika disetel ke false, menyebabkan fungsi penyelesaian Anda menampilkan kesalahan jika kembali tidak ditentukan. |
6 | resolverValidationOptions Ini adalah argumen opsional dan menerima objek dengan properti Boolean. |
7 | inheritResolversFromInterfaces Ini adalah argumen opsional dan menerima argumen Boolean untuk memeriksa pewarisan objek resolver. |
Ilustrasi
Mari kita buat aplikasi sederhana untuk memahami skema ini. Ini akan membuat skema untuk menanyakan daftar siswa dari server. Data siswa akan disimpan dalam bentuk flat file dan kita akan menggunakan modul node bernamanotarealdb untuk memalsukan database dan membaca dari file datar.
Langkah 1 - Unduh dan Instal Dependensi yang Diperlukan untuk Proyek
Buat folder bernama schema-app. Ubah direktori Anda menjadi aplikasi skema dari terminal. Kemudian, ikuti langkah 3 hingga 5 yang dijelaskan di bab Pengaturan Lingkungan untuk menyelesaikan pengunduhan dan proses instalasi.
Langkah 2 - Buat Skema
Menambahkan schema.graphql file di folder proyek, schema-app dan tambahkan kode berikut -
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
Akar skema adalah tipe Query. Kueri memiliki dua bidang - salam dan Siswa yang mengembalikan String dan daftar siswa masing-masing. Mahasiswa dideklarasikan sebagai tipe Objek karena berisi beberapa bidang. Bidang ID dideklarasikan sebagai non-nullable.
Langkah 3 - Buat Pemecah Masalah
Buat file resolvers.js di folder proyek dan tambahkan kode berikut -
const db = require('./db')
const Query = {
greeting:() => {
return "hello from TutorialsPoint !!!"
},
students:() => db.students.list()
}
module.exports = {Query}
Disini sapaan dan siswa adalah resolver yang menangani query tersebut. students resolver functionmengembalikan daftar siswa dari lapisan akses data. Untuk mengakses fungsi resolver di luar modul, objek Query harus diekspor menggunakanmodule.exports.
Langkah 4 - Jalankan Aplikasi
Buat file server.js dan lihat langkah 8 di Bab Pengaturan Lingkungan. Langkah selanjutnya adalah menjalankan perintah npm start di terminal. Server akan aktif dan berjalan pada 9000 port. Di sini, kami menggunakan GraphiQL sebagai klien untuk menguji aplikasi. Buka browser dan ketik URL,http://localhost:9000/graphiql.
Ketik kueri berikut di editor -
{
greeting
students {
id
firstName
lastName
}
}
Kueri akan menampilkan output seperti yang ditunjukkan di bawah ini -
Note- Kita dapat mengganti students.json dengan panggilan RESTful API untuk mengambil data siswa atau bahkan database nyata seperti MySQL atau MongoDB. GraphQL menjadi pembungkus tipis di sekitar lapisan aplikasi asli Anda untuk meningkatkan kinerja.