GraphQL

1. Penjelasan GraphQL
GraphQL merupakan query language seperti SQL, namun perbedaannya adalah SQL bertugas untuk melakukan query ke database, sedangkan GraphQL bertugas untuk melakukan query ke suatu web service yang menjalankan GraphQL server
2. Mengapa Menggunakan GraphQL
Dengan menerapkan GraphQL pada webservice maka kita akan mendapatkan beberapa kelebihan berikut, yaitu :
2.1. Satu Endpoint
Apabila kita menggunakan GraphQL pada web service, maka kita cukup memberikan satu endpoint kepada client, misalnya /graphql
, dengan menggunakan satu endpoint ini maka client sudah bisa mendapatkan data apapun yang disediakan
Berbeda dengan REST yang membutuhkan banyak endpoint untuk mendapatkan berbebagi jenis data, misalnya data biodata menggunakan endpoint /biodata
, data produk menggunakan endpoint /produk
, dan sebagainya
2.2. Client Bebas Menentukan Bentuk Data
Permasalahan yang sering terjadi saat client meminta data ke REST adalah data yang diterima terlalu kompleks, sedangkan yang dibutuhkan hanya beberapa field saja, misalnya data biodata memiliki struktur seperti berikut
const Biodata = {
id: string,
nama: string,
alamat: string,
jenisKelamin: boolean
}
Misalnya dari data biodata diatas, client hanya membutuhkan nama
saja, hal ini tidak dapat kita lakukan karena REST akan memberikan seluruh field yang dimiliki dan membuat kita menjadi boros
Dengan menggunakan GraphQL maka client bisa menentukan field apa saja yang ia butuhkan, sehingga tidak boros resource
2.3. Dokumentasi Otomatis
Permasalahan lain yang sering dijumpai oleh client adalah tidak tau bagaimana cara menggunakan suatu web service karena tidak dilengkapi dengan dokumentasi penggunaan, dengan menerapkan GraphQL maka GraphQL akan secara otomatis membuatkan dokumentasi penggunaan sehingga mempermudah client saat menggunakan web service tersebut
3. Contoh GraphQL Web Service
Berikut contoh beberapa web service yang menggunakan GraphQL, silahkan dicoba agar lebih memahami cara menggunakan GraphQL
https://countries.trevorblades.com
https://graphql-pokemon.now.sh
4. Cara Kerja GraphQL Server
Sebelum membuat GraphQL server, mari kita pahami dulu cara kerja dari GraphQL server serta beberapa istilah yang perlu kita pahami

4.1. GraphQL Server
GraphQL server merupakan server yang dapat menerima query GraphQL dan memberikan data berdasarkan permintaan client, untuk membuat GraphQL server kita bisa menggunakan package yang bernama graphql
ditambah dengan framework web seperti express
4.2. Schema
Schema merupakan bagian dari GraphQL server yang menentukan bentuk dari data dan operasi apa saja yang dapat dilakukan
4.3. Query
Query merupakan bagian dari schema yang menentukan operasi apa saja yang bisa dilakukan yang berhubungan dengan pengambilan suatu data ( fetching data ) misalnya getBiodata
, getBiodataByIndex
dan sebagainya
4.4. Mutation
Mutation merupakan bagian dari schema yang menentukan operasi apa saja yang bisa dilakukan yang berhubungan dengan perubahan suatu data, misalnya penambahan data, perubahan data, serta penghapusan data
4.5. Resolver
Kalau schema hanya menentukan operasi apa saja yang dapat dilakukan, maka disini resolver bertugas untuk menyediakan data yang dibutuhkan oleh schema, misalnya dengan mengambil data dari database atau meminta data ke web service lain
5. Membuat GraphQL Server
Pada tutorial berikut kita akan membuat sebuah GraphQL Server yang menyediakan data Biodata, dimana kita bisa mengambil dan melakukan perubahan pada data tersebut
5.1. Install GraphQL Server
npm install express graphql express-graphql
graphql
merupakan package yang berisi library utama dari graphql, disini kita menggunakan express untuk membuat GraphQL server, maka dari itu kita perlu package express-graphql
untuk menghubungkan graphql dan express
5.2. Membuat Schema
Kita bisa membuat sebuah schema dengan menggunakan fungsi buildSchema
, kita tinggal memasukkan GraphQL Schema Definition Language untuk membuat schema GraphQL
// schema.js
const { buildSchema } = require('graphql')
const schema = buildSchema(`
type Biodata {
nama: String
alamat: String
}
input BiodataInput {
nama: String!
alamat: String!
}
type Query {
getBiodata: [Biodata]
getBiodataByIndex(index: Int!): Biodata
}
type Mutation {
createBiodata(biodata: BiodataInput!): Biodata
updateBiodata(index: Int!, biodata: BiodataInput!): Biodata
deleteBiodata(index: Int!): Biodata
}
`)
module.exports = schema
5.3. Membuat Resolver
Kali ini kita akan membuat sebuah variabel yang berisi data biodata untuk mensimulasikan data dari database untuk mempermudah tutorial ini
// resolver.js
const biodata = [
{
nama: 'Budi',
alamat: 'Probolinggo'
},
{
nama: 'Yanto',
alamat: 'Malang'
}
]
const resolver = {
getBiodata: function() {
return biodata
},
getBiodataByIndex: function(args) {
return biodata[args.index]
},
createBiodata: function(args) {
biodata.push(args.biodata)
return args.biodata
},
updateBiodata: function(args) {
biodata[args.index] = args.biodata
return args.biodata
},
deleteBiodata: function(args) {
biodata.splice(args.index, 1)
return null
}
}
module.exports = resolver
5.4. Membuat Server
Terakhir kita tinggal menggabungkan schema dan resolver dengan membuat sebuah server
// index.js
const express = require('express')
const expressGraphql = require('express-graphql')
const schema = require('./schema')
const rootValue = require('./resolver')
const app = express()
app.use(
'/graphql',
expressGraphql({
schema,
rootValue,
graphiql: true
})
)
app.listen(3000)
Selesai, maka sekarang kita bisa menggunakan GraphQL server tersebut dengan mengunjungi /graphql
Last updated
Was this helpful?