GraphQL Mesh untuk Meningkatkan Produktivitas Engineer

Nicky Prabowo
Grow at Warung Pintar
3 min readSep 29, 2022
Warung Pintar

Di awal terbentuknya tim Sales Pintar, kita diharuskan membuat infrastruktur kita sendiri yang terpisah dari produk utama, namun tentunya dengan mengikuti standar dari Warung Pintar. GraphQL telah menjadi standar untuk komunikasi antara client dan server di Warung Pintar. GraphQL Server digunakan sebagai API Gateway untuk menghimpun API dari beberapa service backend untuk kemudian bisa diakses oleh client.

Implementasi GraphQL server yang ada sekarang mengharuskan backend engineer untuk koding di dua tempat. Pertama-tama, seorang backend engineer harus membuat endpoint REST API di projek milik timnya. Kemudian, dia harus koding di GraphQL server dengan membuat skema GraphQL dan juga resolver/handler yang akan menerima request dari client untuk kemudian diteruskan ke server miliknya. Seiring berjalannya waktu, beberapa backend engineer merasa cara ini cukup menguras tenaga dan perlu pendekatan lain yang lebih efisien.

Existing GraphQL Server (Go + gqlgen)

Setelah diskusi dengan Staff Engineer Backend, akhirnya kita memutuskan untuk mencoba menggunakan GraphQL Mesh sebagai GraphQL server di Sales Pintar. GraphQL Mesh adalah GraphQL server yang memungkinkan kita untuk mengakses berbagai sumber data dengan query GraphQL tanpa perlu banyak koding. Kita bisa terkoneksi dengan REST API, MySQL, SOAP API, MongoDB, atau bahkan endpoint GraphQL API lainnya hanya dengan konfigurasi di sebuah file. Jadi kita akan tetap koding di dua tempat. Namun, dengan porsi yang jauh lebih kecil dari pendekatan sebelumnya karena kita sudah tidak perlu lagi membuat skema GraphQL secara manual. GraphQL Mesh akan secara otomatis menciptakan skema GraphQL dan juga resolver untuk kita. Berikut implementasinya:

GraphQL Server with GraphQL Mesh

Pada contoh di atas, GraphQL Mesh dihubungkan dengan sebuah endpoint REST API. Selain menambahkan konfigurasi untuk koneksi antar service di .meshrc.yaml, kita juga harus memberi tahu spesifikasi endpoint REST kepada si GraphQL Mesh yang dituliskan di file get-all-salesman.JSON . Kalau REST API kamu sudah dilengkapi dengan OpenAPI Spec tentunya akan lebih mudah karena kita tidak perlu lagi menuliskan spesifikasi endpoint, kamu tinggal menggunakan plugin grapql-mesh/openapi dan menambahkan url spesifikasinya.

Perbandingan tahap pembuatan endpoint existing GraphQL vs GraphQL Mesh

Hasilnya, teman-teman backend engineer merasakan pekerjaan menjadi jauh lebih ringan dan tentunya meningkatkan produktivitas dalam pekerjaan sehari-hari mengembangkan API. Namun, ada juga beberapa kendala yang kami alami dengan GraphQL Mesh seperti sempat beberapa kali service tiba-tiba tidak bisa berjalan, ternyata kita perlu upgrade versi GraphQL Mesh. Selain itu, dulu dokumentasi GraphQL Mesh belum sebaik sekarang dan belum banyak dibahas dalam artikel sehingga kita agak kesulitan saat menemui masalah.

Terima kasih banyak untuk bang Zeihan, mas Andre Sudi, mas Kevin, mas Oky, mas Yuri, Hengky, dan mas Ramadhan yang banyak berkontribusi di projek ini. Kami di Sales Pintar punya pengalaman yang seru menggunakan GraphQL Mesh, kami harap makin banyak orang yang tertarik mencoba. Selamat mencoba!

English version also available here

--

--