lifelong learner — urip iku urup, currently working on accenture.

mengenal graphql (query language)

1
Degananda.com -

Selayang pandang

Graphql adalah query language yang dibangun oleh facebook dan digunakan pada sisi server. Guna dari graphql sesuai dengan namannya “query language” adalah untuk melakukan query. Graphql tidak berhubungan secara langsung dengan database tetapi berada di sisi client dan server. Pada sisi client yang secara langsung nantinnya mengakses API(graphql di sisi server).

Dengan kata lain graphql tidak terbatas untuk database tertentu baik sql atu nosql. Graphql akan mengspesifikasikan data yang dibutuhkan oleh client. Graphql akan melakukan query terhadap api yang kita sediakan di server. Graphql mengkombinasikan antara Rest dan SQL(Structured query language).

Beberapa fitur yang ditawarkan oleh graphql

  1. Standarisasi API yang didukung oleh facebok which is salah satu perusahaan teknologi besar didunia sehingga sangat membantu kita untuk membuat teknologi yang sesuai dengan standar.
  2. declarative data fetching
  3. graphql menggunakan single endpoint sesuai dengan kaidah rest

Dengan graphql yang mendefinisikan data yang dibutuhkan justru adalah client bukan server sehingga akan meningkatkan efisiensi dalam mengkonsumsi API.

Cara kerja graphql

Aplikasi saat ini umumnya menggunakan API(Application programming interface) untuk mendapatkan data. API ini dihost oleh suatu server dan juga bertugas untuk berhubungan dengan database.  Arsitektur seperti ini kita kenal dengan tier-3 application yakni memisahkan antara presentation layer(frontend), application layer(backend) dan database layer.

Client tidak hanya berhubungan dengan satu api namun terkadang akan berhubungan juga dengan api lainnya misalkan menggunakan api google maps, api graph facebook , dan lain sebagainnya. Lalu dimanakah graphql berada? jawabannya adalah pada sisi “client” dan “server” yang berhubungan/mengkases suatu API. dengan graphql kita(client mendefinisikan data yang ingin kita dapatkan dari suatu API(Application programming interface). Sehingga diagram diatas jika ditambahkan teknologi graphql akan menjadi seperit berikut ini.

Sehingga berdasarkan gambar diatas meski graphql didevelop oleh facebook tidak hanya react yang dapat menggunakannya melainkan frontend framework lainnya juga bisa seperti angular, vue, meteor dan lain sebagainnya. Apapun frameworknya jika berhubungan(mengakses) dengan API maka graphql dapat digunakan.

Mengapa graphql dibuat ?

Terdapat tiga alasan mengapa facebook membuat graphql

  1. bertambahnya mobile usage sehingga diharapkan dengan adannya graphql mobile devices akan semakin sedikit dalam mengkonsumsi data. Graphql akan mengurangi konsumsi data yang dilakukan oleh mobile devices
  2. Meningkatkan performa. Dengan semakin sedikitnya data yang dikonsumsi mobile devices maka performa secara otomatis akan meningkat.
  3. Banyaknya framework frontend yang ada saat ini(react,vue,angular,dsb) maka graphql hadir untuk menstandarkan proses konsumsi API (meningkatn efisiensi konsumsi api).

Mengkonsumsi API

Tanpa graphql client akan memanggil endpoint tertentu. Misalkan kita ingin mengambil data terkait dan daftar post user tersebut dengan melalui mekanisme REST  seseorang maka endpoint yang harus diakses dengan http method GET adalah

mendapatkan data profile

/api/user/1

mendapatkan data mengenai post dari suatu user

/api/user/1/posting

dengan mekanisme seperti ini maka yang mendefinisikan data adalah SERVER. Sedangkan jika kita menggunakan graphql maka yang akan mendefinsikan data yang dibutuhkan adalah di sisi client.

{
  user(id: 1) {
    nama
    umur
    post {
    	title
    }
  }
}

Sangat jelas sekali perbedaanya antara mekanisme mengkonsumsi API dengan graphql dan non-graphql. Dengan mekanisme seperti ini(graphql) perubahan pada client(perubahan design pada ui terkait dengan data yang ditampilkan) akan dapat ditangani lebih mudah jika dibandingkan dengan mekanisme seperti REST karena yang mendefinisikan data adalah client.

Cara implementasi konsumsi REST api dan graphql sesuai dengan dua query diatas adalah seperti ini.

Rest

dengan mekanisme rest akan melakukan request terhadap berbagai API dan data yang diberikan oleh api rest tersebut tidak semuannya akan digunakan. Bisa jadi client tidak membutuhkan user profile namun server (api) menyediakan data user profile Ini akan sangat mubazir kalau kata orang indonesia. Memang bisa saja dari sisi server menfilter data yang akan diberikan pada client namun bayangkan jika perubahan di client sangat rapid maka harus setiap perubahan melakukan update pada API?.

Graphql

dengan mekanisme graphql maka :

  • Hanya terdapat satu buah endpoint, sehingga kita tidak perlu melakukan dokumentasi terhadap endpoint – endpoint yang ada layaknya seperti rest
  • Client mendefinisikan data yang dibutuhkan melalui query sehingga “what you request is what you get”. Kita akan membutuhkan data yang kita butuhkan saja. Ini akan meningkatkan efisiensi mengkonsumsi API dan Hemat pertukaran data.
  • Hanya mengkases satu buah endpoint jika dibandingkan dengan rest yang mengakses beberapa kali endpoint untuk mendapatkan profile dan daftar post.

Kesimpulan

Itulah penjelasan singkat mengenai graphql dan mekanisme akses api jika dibandingkan dengan REST. Namun tidak ada teknologi yang “silver bullet” karena IT hanyalah support. Sebagus-bagus teknologi jika solusi yang ditawarkan tidak tepat (tidak digunakan/tidak ada user/salah design) juga percuma. Sehingga, graphql ini hanyalah alternatif untuk mendesign arsitektur dari sistem yang kita buat. Jangan terlalu mendewakan teknologi he he he…

Referensi :

  1. https://www.howtographql.com/
  2. https://www.quora.com/What-is-GraphQL

  • Aldi Unanto

    Menarik. Thanks for posting such as this content!