18 Definisi Tipe Data User
di Skema GraphQL
Di era aplikasi modern yang membangun komunikasi client-server semakin cepat, GraphQL semakin menjadi primadona dalam mendefinisikan data. Salah satu kunci sukses dalam implementasi GraphQL di sisi server adalah mendefinisikan skema tipe data yang robust, jelas, dan tetap fleksibel. Pada artikel ini, kita akan mengupas tuntas 18 definisi tipe data pada entitas User
yang umum digunakan pada skema GraphQL profesional, termasuk contoh kode, simulasi query, serta visualisasi alur data agar makin mudah dipahami.
Mengapa Definisi Tipe Data Sangat Penting di GraphQL?
GraphQL bekerja berdasarkan schema first, artinya kontrak antara back-end dan front-end sudah harus disepakati sebelum pengembangan lanjut. Definisi tipe data yang kuat membantu:
- Menstandarisasi struktur payload melalui tipe yang jelas.
- Memudahkan validasi data di sisi server dan client.
- Mengurangi bug akibat salah interpretasi field.
- Menyempurnakan API documentation otomatis.
18 Definisi Tipe Data User
di GraphQL
Mari simulasikan bersama, inilah tipe data User
yang kerap muncul dalam skema business logic modern:
# | Field | Type | Deskripsi |
---|---|---|---|
1 | id | ID! | User ID unik (tidak bisa null, biasanya UUID) |
2 | username | String! | Username unik |
3 | email | String! | Email user (biasanya harus unik) |
4 | fullName | String | Nama lengkap |
5 | phone | String | Nomor telepon, opsional |
6 | avatarUrl | String | URL foto profil, opsional |
7 | bio | String | Biodata atau deskripsi singkat, opsional |
8 | createdAt | DateTime! | Timestamp user dibuat |
9 | updatedAt | DateTime! | Timestamp terakhir diperbarui |
10 | lastLogin | DateTime | Timestamp login terakhir, opsional |
11 | roles | [UserRole!]! | Array peran user, minimal ["USER"] |
12 | isActive | Boolean! | User apakah aktif / suspend |
13 | address | Address | Alamat terkait, opsional |
14 | settings | UserSettings | Preferensi user, opsional (dark mode, dll) |
15 | posts | [Post!]! | Daftar post milik user |
16 | followersCount | Int! | Total followers |
17 | followingCount | Int! | Total yang di-follow |
18 | friends | [User!]! | Relasi dengan user lain; contoh: fitur pertemanan |
Catatan: Field opsional tidak wajib dikembalikan server, sehingga perlu penanganan nullability yang kuat di client.
Contoh Definisi Skema GraphQL
Langsung saya tunjukkan definisi skema lengkapnya dalam GraphQL SDL (schema definition language
):
scalar DateTime
enum UserRole {
USER
ADMIN
MODERATOR
}
type Address {
street: String
city: String
province: String
postalCode: String
country: String
}
type UserSettings {
theme: String
notifications: Boolean
}
type Post {
id: ID!
title: String!
content: String!
createdAt: DateTime!
}
type User {
id: ID!
username: String!
email: String!
fullName: String
phone: String
avatarUrl: String
bio: String
createdAt: DateTime!
updatedAt: DateTime!
lastLogin: DateTime
roles: [UserRole!]!
isActive: Boolean!
address: Address
settings: UserSettings
posts: [Post!]!
followersCount: Int!
followingCount: Int!
friends: [User!]!
}
Simulasi Query: Ambil Data User
Misalkan client ingin mengambil data user sekaligus detail postingan dan teman-temannya:
query {
user(id: "user-123") {
id
username
fullName
email
createdAt
roles
isActive
posts {
id
title
createdAt
}
friends {
id
username
}
}
}
Respons yang dikirim server bisa seperti:
{
"data": {
"user": {
"id": "user-123",
"username": "john_doe",
"fullName": "John Doe",
"email": "john@example.com",
"createdAt": "2024-06-10T15:30:00Z",
"roles": ["USER"],
"isActive": true,
"posts": [
{ "id": "p1", "title": "Hello GraphQL", "createdAt": "2024-05-01T09:00:00Z" }
],
"friends": [
{ "id": "user-234", "username": "jane_smith" }
]
}
}
}
Diagram Relasi Antartipe: Mermaid
Agar lebih gamblang, berikut diagram relasi antartipe pada skema di atas:
erDiagram User ||..o| Post : creates User ||..|| Address : has User ||..|| UserSettings : owns User ||..o| User : friends-with User }o--|{ UserRole : has
Penjelasan:
User
⬄Post
: Satu user bisa punya banyak post.User
⬄Address
&UserSettings
: Setiap user bisa memiliki satu alamat dan satu preferensi settings.User
⬄User
: Relasi teman antaruser.User
⬄UserRole
: Satu user dapat punya beberapa peran.
Best Practice dalam Mendefinisikan Schema User
- Nullable Field: Gunakan field nullable (
String
, tanpa tanda!
) untuk informasi tidak wajib (misalbio
,avatarUrl
). - Enum dan Array: Untuk field seperti
roles
, gunakan enum agar hanya value tertentu yang diperbolehkan. - Relasi Tipe Lain: Tipe
User
bisa memiliki relasi ke tipe lain (posts
,address
,settings
) untuk normalisasi data. - Count Field: Selalu pisahkan field relasi array (
posts
,friends
) dengan count-nya (followersCount
) agar efisien di front-end. - Timestamp: Pakai scalar
DateTime
dengan standar ISO 8601. - Recursive Field: Relasi
friends: [User!]!
mendukung fitur pertemanan mutual. - Security: Jangan expose password atau token di schema!
Studi Kasus: Flow Registrasi User Baru
Mari kita simulasikan flow pendaftaran user baru dengan field minimum:
sequenceDiagram participant C as Client participant S as GraphQL Server C->>S: mutation { registerUser(username, email, password) } S-->>C: { id, username, email, createdAt, roles }
Pada flow di atas, server hanya mengembalikan field yang diperlukan client setelah registrasi. Field lain seperti friends
, address
, dan settings
dapat dilengkapi nanti setelah login.
Penutup
Mendefinisikan tipe data pada skema GraphQL adalah fondasi utama untuk membangun API yang terstruktur, konsisten, dan scalable. Tipe User
sangat penting karena hampir setiap produk digital modern—dari SaaS, marketplace, hingga social network—berbasis pada entitas user yang kaya informasi dan relasi.
Mulai dari 18 definisi field di atas, Anda dapat memperluas tipe User
sesuai kebutuhan spesifik bisnis. Namun pastikan Anda selalu menjaga clean schema, strong typing, dan pikirkan nullability dari awal. Implementasi best practice pada schema GraphQL tidak hanya mempercepat development, tetapi juga meningkatkan pengalaman developer front-end maupun QA di masa depan.
Sudah waktunya bekerja dengan schema yang proper! 🚀
Sumber & Referensi:
- GraphQL Official Documentation
- Apollo GraphQL Best Practices
- Pengalaman pribadi dalam membangun SaaS dan API layanan publik.
40 Chain Interceptor dengan `grpc_middleware`
Artikel Terhangat
38 Otorisasi dengan Interceptor gRPC
07 Jul 2025
37 Otentikasi di Middleware gRPC
07 Jul 2025

38 Otorisasi dengan Interceptor gRPC
