Query GraphQL adalah string yang diinterpretasikan oleh server yang mengembalikan data dalam format tertentu. Misalnya, kamu memiliki aplikasi media sosial dan ingin menampilkan daftar teman beserta nama dan alamat teman-teman kamu. Client application akan melakukan proses seperti ini:
- Meminta data daftar teman diambil dari database.
- Ditampilkan di client.
- Kembali mengambil data nama.
- Ditampilkan di client lagi.
- Mengambil data lokasi dari database yang sama.
- Ditampilkan di client lagi.
Dan begitu seterusnya. Proses bolak-balik seperti sedang bermain pingpong. Kelemahannya, karena aksi tersebut dilakukan di client application, maka aplikasi mobile kamu rentan mengalami crash.
Contoh dalam perintah REST:
GET /users/1/friends/
GET /friends/{ID}
GET /location/{ID}
Sementara kalau kamu menggunakan GraphQL, aktifitas hanya dilakukan satu kali request. Contohnya seperti di bawah ini:
{
user(id: 1) { nickname friends(limit:10) { Nickname } } } |
Dengan GraphQL, seorang developer mobile apps dan frontend bisa ‘sesuka hati’ dalam menentukan data apa saja yang dibutuhkan dan disesuaikan dengan komponen aplikasi yang sedang dikerjakan, tidak tergantung kepada sisi backend. Jika pada REST API konvensional diwajibkan untuk mendeklarasikan setiap request yang diminta dengan perintah GET untuk mengambil data, POST untuk menambah data dan seterusnya.
Mungkin pada enginer Facebook memahami keragaman query, intinya satu jua, yaitu menampilkan data. Untuk itu mereka menyatukan semua perbedaan request dalam satu bahasa, yaitu bahasa GraphQL. Tidak ada perintah GET, PUT, POST, dan DELETE di GraphQL, selama request yang dilakukan dalam format graph query language maka sisi backend akan paham apa yang diminta oleh klien. Enaknya lagi, GraphQL tidak hanya berjalan pada interface HTTP, namun juga bisa berjalan pada interface yang lain, seperti SSH, Telnet, bahkan CLI command. Selain itu, GraphQL tidak tergantung pada bahasa pemrograman dan database apapun. Cukup banyak bahasa pemrograman yang mendukung GraphQL, seperti PHP, JS, .Net, Go, Java, Python, dan yang lainnya yang dapat Anda lihat di: http://graphql.org/code/.
Bisa dibayangkan proses GraphQL sebagai berikut:
Frontend / Mobile (melakukan request) → GraphQL (sebagai penerjemah) → Backend (bisa JS, PHP, Go, Python) → Data Source (bisa MySql, MongoDB, Redis, bahkan URL endpoint eksternal).
Implementasi
Instal terlebih dahulu Graphene (python library) untuk menggunakan GraphQL APIs. Ketikkan perintah berikut untuk menginstal: pip install graphene. Kemudian ketikkan python hello.py yang berisi kode di bawah ini:
import graphene class Query(graphene.ObjectType): hello = graphene.String() def resolve_hello(self, args, context, info): return ‘Hello world!’ schema = graphene.Schema(query=Query) result = schema.execute(‘{ hello }’) print(result.data[‘hello’]) |
Referensi