GraphQL Nodejs Java Script

Cara membuat graphql server dengan nodejs

July 28, 2019

Sudahkah diantara kamu mendengar tentang graphql? Kalau belum mari kita belajar tentang graphql hari ini.

Apa itu GraphQL?

Di awal - awal kemunculanya istilah ini di sosial media banyak sekali terjadi perdebatan disana. Banyak yang bilang bahwasanya graphql ini adalah masa depan untuk pengembangan web api.

Akan tetapi banyak juga yang kurang setuju dengan graphql. Jadi mungkin kamu ada yang penasaran, apa sih sebenarnya GraphQL itu? Mari kita bahas.

Berdasarkan website resminya GraphQL, seperti ini definisi GraphQL itu:

A query language for your API

Dan untuk yang lebih lengkapnya seperti ini :

GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.

Nah inti dari penjelasanya GraphQL itu adalah sebuah bahasa untuk berkomunikasi dengan API. GraphQL adalah cara untuk mengkases data yang disediakan oleh API.

Jadi GraphQL ini diciptakan oleh Facebook, pada awalnya GraphQL ini hanya digunakan oleh internal perusahaan facebook dimulai sejak tahun 2012, akan tetapi pada tahun 2015 akhirnya facebook mengumumkan GraphQL sebagai salah satu project open source.

Sampai saat ini sudah banyak perusahaan yang menggunakan teknologi GraphQL ini.

Kenapa menggunakan GraphQL?

Sebenarnya graphql di buat pada awalnya adalah untuk mengatasi sebuah permasalahan simple pada prosess pengembangan aplikasi melalui rest api.

Jadi awalnya ide dari graphql ini bisa digunakan agar user bisa mendapatkan data sesuai yang dia butuhkan.

Jadi seandainya data user itu selengkapnya seperti ini :

{
    "name":"Bernhard Muller",
    "email":"amani.hettinger@example.com",
    "token":"CAn2O8R5shngJ4O4VydgSQct45KGsyUz"
}

Akan tetapi ternyata aplikasi kita hanya butuh data name dan email jadi kita bisa request ke api kita untuk mendapatkan data tersebut seperti ini.

{
  name
  email
}

Maka kita akan mendapatkan data seperti ini :

{
  "data": {
    "name": "Bernhard Muller",
    "email": "amani.hettinger@example.com"
  }
}

Cukup sederhana, tapi ini sangat memudahkan sekali untuk yang mengakses api ini.

Akan tetapi tidak terbatas hanya query saja, misalnya, dalam mengembangkan sebuah aplikasi yang cukup kompleks apa lagi dengan sistem microservice, sudah pasti akan menggunakan banyak endpoint atau url.

Masalah ini bisa diselesaikan dengan graphql yang mana kita hanya akan mengakses ke satu endpoint saja.

Masih banyak kelebihan - kelebihan yang bisa dapatkan dengan menggunakan graphql ini. Kita pelajari sambil praktek.

GraphQL NodeJS Server

GraphQL tidak melulu harus menggunakan nodejs, GraphQL hanyalah spesifikasi query, kita bisa mengimplementasikan nya kedalam banyak bahasa pemrogramman. Akan tetapi pada kesempatan kali ini kita akan menggunakan nodejs.

Buat project baru

Silahkan buat folder untuk aplikasi nodejs, pada contoh ini saya menggunakan nama nodejs-graphql. Kemudian jangan lupa untuk init project dengan npm.

Install package graphql dan express.

npm install express express-graphql graphql --save

Buat aplikasi server sederhana

Sekarang mari kita coba membuat sebuah aplikasi server sederhana dengan data statik. Disini kita menggunakan framework express untuk server dan graphql untuk parsing querynya.

const express = require('express');
const graphqlHttp =  require('express-graphql');
const {  buildSchema } = require('graphql');

const schema = buildSchema(`
    type QueryUser{
        name: String,
        email: String,
        token: String
    }
`);

const root = {
    name: () => {
        return 'Bernhard Muller';
    },
    email: () => {
        return 'amani.hettinger@example.com';
    },
    token: () => {
        return 'CAn2O8R5shngJ4O4VydgSQct45KGsyUz';
    }
}

const app = express();
app.use('/graphql', graphqlHttp({
    schema: schema,
    rootValue: root,
    graphiql: true
}));

app.listen(4000);
console.log('Runiing on http://localhost:4000');

Rangkuman sedikit tentang kode diatas, jadi kita menggunakan express-graphql sebagai middleware untuk endpoint. Dalam middleware kita memberikan schema dan data.

app.use('/graphql', graphqlHttp({
    schema: schema,
    rootValue: root,
    graphiql: true
}));

Disini kita juga menggunakan graphql interface agar kita bisa nge test api ini dengan tampilan interaktif seperti berikut ini. Untuk membuka tampilanya buka url ini http://localhost:4000/graphql.

GraphQL Interface

Selanjutnya kita perlu mendefinisikan schema yang mana disini digunakan sebagai struktur data yang bisa digunakan.

const schema = buildSchema(`
    type QueryUser{
        name: String,
        email: String,
        token: String
    }
`);

Kemudian kita menyediakan data statik nya seperti ini.

const root = {
    name: () => {
        return 'Bernhard Muller';
    },
    email: () => {
        return 'amani.hettinger@example.com';
    },
    token: () => {
        return 'CAn2O8R5shngJ4O4VydgSQct45KGsyUz';
    }
}

Nah berikut ini contoh curl untuk mengakses tanpa graphql interface.

curl 'http://localhost:4000/graphql?' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
  "query": "{\n  name\n  email\n}\n",
  "variables": null
}'

Diatas cukup simple banget, next kita akan buat yang lebih kompleks sedikit yang mana kita akan menggunakan database ada query insert, delete dan update.

Subscribe to My Newsletter

Thank you for your interest in my blog. Sign up to my newsletter to stay current on the latest news and information me and to be the first to see new blog posts.