REST API vs GraphQL: Panduan Memilih untuk System Analyst
Pendahuluan
Sebagai System Analyst, salah satu keputusan arsitektur yang sering dihadapi adalah memilih antara REST API dan GraphQL. Keduanya adalah pendekatan komunikasi antar sistem, tapi dengan filosofi yang berbeda.
Apa Itu REST API?
REST (Representational State Transfer) adalah arsitektur API yang menggunakan HTTP methods standar:
- GET
- POST
- PUT/PATCH
- DELETE
Setiap resource memiliki endpoint tersendiri, misalnya:
- GET /api/users
- GET /api/users/123
- POST /api/users
Apa Itu GraphQL?
GraphQL adalah query language untuk API yang dikembangkan oleh Facebook. Perbedaan utamanya:
- Single endpoint
- Client-driven
- Strongly typed
Perbandingan
Kapan Memilih REST?
- Sistem sederhana dengan resource yang jelas
- Tim yang familiar dengan REST
- Butuh
- Integrasi dengan banyak third-party service
- Public API yang perlu dokumentasi standar (OpenAPI/Swagger)
Kapan Memilih GraphQL?
- Frontend butuh fleksibilitas tinggi dalam mengambil data
- Banyak
- Mobile app yang butuh
- Dashboard kompleks dengan banyak variasi query
Contoh: Arsitektur REST API (Sequence Diagram)
Bagaimana client mengambil data user beserta order di REST — butuh 2 request terpisah:
sequenceDiagram
participant Client
participant REST as REST API Server
participant DB as Database
Note over Client,DB: REST: Multiple Endpoints
Client->>REST: GET /api/users/123
REST->>DB: SELECT * FROM users WHERE id=123
DB-->>REST: User data
REST-->>Client: {id:123, name:"Dadang", email:"..."}
Client->>REST: GET /api/users/123/orders
REST->>DB: SELECT * FROM orders WHERE user_id=123
DB-->>REST: Orders data
REST-->>Client: [{orderId:1, total:500K}, {orderId:2, total:750K}]
Note over Client: Total: 2 HTTP requests
Contoh: Arsitektur GraphQL (Sequence Diagram)
Dengan GraphQL, client bisa mengambil data yang sama dalam 1 request:
sequenceDiagram
participant Client
participant GQL as GraphQL Server
participant DB as Database
Note over Client,DB: GraphQL: Single Endpoint
Client->>GQL: POST /graphql
Note right of Client: query { user(id:123) {<br>name, email,<br>orders { orderId, total }<br>}}
GQL->>DB: SELECT user + orders (resolved)
DB-->>GQL: Combined data
GQL-->>Client: {user:{name:"Dadang", orders:[...]}}
Note over Client: Total: 1 HTTP request
Contoh: Decision Tree Memilih REST vs GraphQL
flowchart TD
Start(["Pilih API Style"]) --> Q1{"Data banyak relasi nested?"}
Q1 -->|Ya| Q2{"Mobile app dengan bandwidth terbatas?"}
Q1 -->|Tidak| Q3{"Public API?"}
Q2 -->|Ya| GQL1["GraphQL"]
Q2 -->|Tidak| Q4{"Dashboard dengan banyak variasi query?"}
Q4 -->|Ya| GQL2["GraphQL"]
Q4 -->|Tidak| REST1["REST API"]
Q3 -->|Ya| REST2["REST API + OpenAPI Docs"]
Q3 -->|Tidak| Q5{"Tim familiar GraphQL?"}
Q5 -->|Ya| GQL3["GraphQL"]
Q5 -->|Tidak| REST3["REST API"]
style GQL1 fill:#E040FB,color:#fff
style GQL2 fill:#E040FB,color:#fff
style GQL3 fill:#E040FB,color:#fff
style REST1 fill:#2196F3,color:#fff
style REST2 fill:#2196F3,color:#fff
style REST3 fill:#2196F3,color:#fff
Rekomendasi untuk System Analyst
Ditulis oleh Dadang Kriswanto — System Analyst & Blogger di dadang.kriswanto.my.id