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.