Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
18 Jul 2025 · 5 mnt baca ·Artikel 18 / 125
Go

18 Definisi Tipe Data `User` di Skema GraphQL

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

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:

#FieldTypeDeskripsi
1idID!User ID unik (tidak bisa null, biasanya UUID)
2usernameString!Username unik
3emailString!Email user (biasanya harus unik)
4fullNameStringNama lengkap
5phoneStringNomor telepon, opsional
6avatarUrlStringURL foto profil, opsional
7bioStringBiodata atau deskripsi singkat, opsional
8createdAtDateTime!Timestamp user dibuat
9updatedAtDateTime!Timestamp terakhir diperbarui
10lastLoginDateTimeTimestamp login terakhir, opsional
11roles[UserRole!]!Array peran user, minimal ["USER"]
12isActiveBoolean!User apakah aktif / suspend
13addressAddressAlamat terkait, opsional
14settingsUserSettingsPreferensi user, opsional (dark mode, dll)
15posts[Post!]!Daftar post milik user
16followersCountInt!Total followers
17followingCountInt!Total yang di-follow
18friends[User!]!Relasi dengan user lain; contoh: fitur pertemanan
Danger
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):

graphql
 1scalar DateTime
 2
 3enum UserRole {
 4  USER
 5  ADMIN
 6  MODERATOR
 7}
 8
 9type Address {
10  street: String
11  city: String
12  province: String
13  postalCode: String
14  country: String
15}
16
17type UserSettings {
18  theme: String
19  notifications: Boolean
20}
21
22type Post {
23  id: ID!
24  title: String!
25  content: String!
26  createdAt: DateTime!
27}
28
29type User {
30  id: ID!
31  username: String!
32  email: String!
33  fullName: String
34  phone: String
35  avatarUrl: String
36  bio: String
37  createdAt: DateTime!
38  updatedAt: DateTime!
39  lastLogin: DateTime
40  roles: [UserRole!]!
41  isActive: Boolean!
42  address: Address
43  settings: UserSettings
44  posts: [Post!]!
45  followersCount: Int!
46  followingCount: Int!
47  friends: [User!]!
48}

Simulasi Query: Ambil Data User

Misalkan client ingin mengambil data user sekaligus detail postingan dan teman-temannya:

graphql
 1query {
 2  user(id: "user-123") {
 3    id
 4    username
 5    fullName
 6    email
 7    createdAt
 8    roles
 9    isActive
10    posts {
11      id
12      title
13      createdAt
14    }
15    friends {
16      id
17      username
18    }
19  }
20}

Respons yang dikirim server bisa seperti:

json
 1{
 2  "data": {
 3    "user": {
 4      "id": "user-123",
 5      "username": "john_doe",
 6      "fullName": "John Doe",
 7      "email": "john@example.com",
 8      "createdAt": "2024-06-10T15:30:00Z",
 9      "roles": ["USER"],
10      "isActive": true,
11      "posts": [
12        { "id": "p1", "title": "Hello GraphQL", "createdAt": "2024-05-01T09:00:00Z" }
13      ],
14      "friends": [
15        { "id": "user-234", "username": "jane_smith" }
16      ]
17    }
18  }
19}

Diagram Relasi Antartipe: Mermaid

Agar lebih gamblang, berikut diagram relasi antartipe pada skema di atas:

MERMAID
erDiagram
    User ||..o| Post : creates
    User ||..|| Address : has
    User ||..|| UserSettings : owns
    User ||..o| User : friends-with
    User }o--|{ UserRole : has

Penjelasan:

  • UserPost: Satu user bisa punya banyak post.
  • UserAddress & UserSettings: Setiap user bisa memiliki satu alamat dan satu preferensi settings.
  • UserUser: Relasi teman antaruser.
  • UserUserRole: Satu user dapat punya beberapa peran.

Best Practice dalam Mendefinisikan Schema User

  1. Nullable Field: Gunakan field nullable (String, tanpa tanda !) untuk informasi tidak wajib (misal bio, avatarUrl).
  2. Enum dan Array: Untuk field seperti roles, gunakan enum agar hanya value tertentu yang diperbolehkan.
  3. Relasi Tipe Lain: Tipe User bisa memiliki relasi ke tipe lain (posts, address, settings) untuk normalisasi data.
  4. Count Field: Selalu pisahkan field relasi array (posts, friends) dengan count-nya (followersCount) agar efisien di front-end.
  5. Timestamp: Pakai scalar DateTime dengan standar ISO 8601.
  6. Recursive Field: Relasi friends: [User!]! mendukung fitur pertemanan mutual.
  7. Security: Jangan expose password atau token di schema!

Studi Kasus: Flow Registrasi User Baru

Mari kita simulasikan flow pendaftaran user baru dengan field minimum:

MERMAID
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:

Artikel Terkait

💬 Komentar