Apa Itu GraphQL?
GraphQL adalah query language untuk API dan runtime untuk mengeksekusi query. Dikembangkan oleh Facebook pada tahun 2012, GraphQL memungkinkan client meminta data yang tepat yang dibutuhkan, tidak lebih dan tidak kurang. GraphQL mengatasi masalah over-fetching dan under-fetching yang umum di REST API.
Mengapa GraphQL?
- Precise Data Fetching – Client meminta field yang dibutuhkan saja
- Single Endpoint – Satu endpoint untuk semua query
- Strong Typing – Schema dengan type system
- Real-time – Subscriptions untuk live data
- Introspection – Self-documenting API
- Versioning – Tidak perlu versioning seperti REST
REST vs GraphQL
| Aspek | REST | GraphQL |
|---|---|---|
| Endpoint | Multiple endpoints | Single endpoint |
| Data Fetching | Fixed response | Client specifies fields |
| Over-fetching | Common | Eliminated |
| Under-fetching | Common (need multiple requests) | Eliminated (single request) |
| Versioning | URL versioning (v1, v2) | No versioning needed |
| Caching | HTTP caching (easy) | More complex |
| Learning Curve | Low | Medium-High |
Konsep Dasar GraphQL
- Schema – Definisi tipe dan operasi
- Query – Membaca data (seperti GET)
- Mutation – Mengubah data (seperti POST/PUT/DELETE)
- Subscription – Real-time data (WebSocket)
- Resolver – Fungsi yang mengambil data untuk field
- Type System – Scalar, Object, Enum, Interface, Union
Roadmap Belajar GraphQL
Level 1: Beginner
- Schema Definition – type, query, mutation
- Basic Queries – Select fields, arguments, aliases
- Mutations – Create, update, delete operations
- Variables – Parameterized queries
- Fragments – Reusable field selections
- Directives – @include, @skip
Level 2: Intermediate
- Nested Queries – Querying related data
- Connections & Pagination – Cursor-based pagination (Relay spec)
- Input Types – Complex input arguments
- Enums – Predefined values
- Interfaces & Unions – Polymorphic types
- Subscriptions – Real-time updates
Level 3: Advanced
- Apollo Server – GraphQL server implementation
- Apollo Client – GraphQL client for React/Vue
- Data Loaders – N+1 problem solution
- Authentication & Authorization – Context, directives
- Error Handling – Custom errors, partial responses
Level 4: Expert
- Federation – Microservices with GraphQL
- Schema Stitching – Combining multiple schemas
- Performance – Query complexity, depth limiting, caching
- Security – Query whitelisting, rate limiting
Contoh Kode GraphQL
Schema
type User {
id: ID!
nama: String!
email: String!
umur: Int
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
createdAt: String!
}
type Query {
users: [User!]!
user(id: ID!): User
posts: [Post!]!
post(id: ID!): Post
}
type Mutation {
createUser(nama: String!, email: String!, umur: Int): User!
updateUser(id: ID!, nama: String, email: String): User
deleteUser(id: ID!): Boolean!
createPost(title: String!, content: String!, authorId: ID!): Post!
}
type Subscription {
postCreated: Post!
}
Queries
# Query sederhana
query {
users {
id
nama
email
}
}
# Query dengan arguments
query {
user(id: "1") {
nama
email
posts {
title
createdAt
}
}
}
# Mutation
mutation {
createUser(nama: "Budi", email: "budi@mail.com", umur: 25) {
id
nama
email
}
}
# Variables
query GetUser($id: ID!) {
user(id: $id) {
nama
email
}
}
# Fragment
fragment UserFields on User {
id
nama
email
}
query {
users {
...UserFields
}
}
Apollo Server (Node.js)
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql`
type User {
id: ID!
nama: String!
email: String!
}
type Query {
users: [User!]!
user(id: ID!): User
}
type Mutation {
createUser(nama: String!, email: String!): User!
}
`;
const resolvers = {
Query: {
users: () => db.users.findAll(),
user: (_, { id }) => db.users.findById(id)
},
Mutation: {
createUser: (_, { nama, email }) => db.users.create({ nama, email })
}
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen(4000).then(({ url }) => {
console.log('GraphQL server ready at ' + url);
});
Tips Belajar GraphQL
- Pelajari REST API dulu – Pahami konsep API dasar
- Pahami Schema – Ini fondasi GraphQL
- Gunakan GraphiQL/Playground – Interactive query tool
- Pelajari Apollo – Server dan Client
- Praktik dengan project nyata – Blog API, e-commerce API
- Baca GraphQL Docs – graphql.org/learn
Tools yang Dibutuhkan
| Tool | Deskripsi |
|---|---|
| Apollo Server | GraphQL server (Node.js) |
| Apollo Client | GraphQL client (React/Vue) |
| GraphiQL / Playground | Interactive query tool |
| Prisma | ORM dengan GraphQL support |
| Git | Version control |
Kesimpulan
GraphQL adalah evolusi dari REST API yang memberikan fleksibilitas lebih besar kepada client. Dengan strong typing, precise data fetching, dan single endpoint, GraphQL adalah pilihan excellent untuk aplikasi modern.
“GraphQL is a query language for APIs and a runtime for fulfilling those queries.” – GraphQL Team




