0Pricing
PHP Academy · Pelajaran

GraphQL vs REST

Pahami kapan GraphQL lebih unggul daripada REST dan alasannya.

GraphQL vs REST adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

Mengapa GraphQL?

Anda sudah tahu cara merilis API REST dalam PHP. GraphQL bukan pengganti HTTP atau solusi ajaib—GraphQL adalah bahasa kueri dan sistem tipe yang memungkinkan klien menjelaskan dengan tepat apa yang dibutuhkannya dan menerima tepat itu dalam satu perjalanan bolak-balik.

Dalam pelajaran ini, kita membandingkan keduanya secara jujur: kapan GraphQL benar-benar unggul, kapan REST masih menjadi pilihan yang tepat, dan biaya operasional yang ditimbulkan GraphQL.

Pengambilan Berlebih dan Pengambilan Kurang

Titik masalah klasik REST:

  • Pengambilan berlebih: GET /users/1 mengembalikan 40 bidang, padahal antarmuka hanya memerlukan 3.
  • Pengambilan kurang: untuk menampilkan kiriman pengguna dan jumlah komentar pada setiap kiriman, Anda memanggil /users/1, lalu /users/1/posts, kemudian N titik akhir komentar.

GraphQL menyatukan semua ini menjadi satu permintaan deklaratif.

query {
  user(id: 1) {
    name
    posts {
      title
      commentCount
    }
  }
}

Satu Titik Akhir, Skema Bertipe

REST menyediakan banyak URL; GraphQL menyediakan satu titik akhir (biasanya POST /graphql) yang didukung skema bertipe kuat. Skema adalah kontraknya—skema dapat diperiksa strukturnya, sehingga alat bantu (pelengkapan otomatis, dokumentasi, pembuatan kode) tersedia secara langsung.

Di bawah ini adalah skema minimal dalam SDL. Bentuk setiap kemungkinan respons telah diketahui sebelumnya.

type User {
  id: ID!
  name: String!
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  commentCount: Int!
}

type Query {
  user(id: ID!): User
}

Respons Mencerminkan Kueri

Salah satu sifat pentingnya: bentuk respons JSON dapat diprediksi dari kueri. Klien tidak pernah perlu menebak nama bidang. Ini menghilangkan seluruh kategori kerepotan akibat perubahan versi—Anda dapat menambahkan bidang tanpa merusak klien lama, dan menandai bidang sebagai tidak digunakan lagi dengan @deprecated alih-alih memotong URL /v2.

{
  "data": {
    "user": {
      "name": "Ada",
      "posts": [
        { "title": "On Engines", "commentCount": 12 }
      ]
    }
  }
}

Saat GraphQL Mengungguli REST

GraphQL adalah pilihan yang lebih kuat ketika:

  • Anda melayani banyak klien dengan karakteristik beragam (web, iOS, Android) yang memiliki kebutuhan data berbeda.
  • Data tersebut berupa sebuah graf dengan relasi mendalam yang dijelajahi klien secara dinamis.
  • Anda ingin mengagregasikan beberapa layanan belakang di balik satu gerbang bertipe.
  • Iterasi cepat pada antarmuka depan penting dan Anda ingin menghindari perubahan tanpa akhir pada titik akhir layanan belakang.

Saat REST Masih Unggul

Jangan otomatis memilih GraphQL. REST lebih sederhana dan sering kali lebih baik ketika:

  • Anda memerlukan penembolokan HTTP — tembolok CDN/tepi menggunakan URL dan verba sebagai kunci; satu POST /graphql tidak dapat mereka kenali.
  • API tersebut berorientasi pada sumber daya dan stabil (CRUD atas beberapa entitas).
  • Anda mengandalkan unggahan/unduhan berkas atau pengaliran, yang dalam REST mendukung multipart dan rentang byte sebagai fitur utama.
  • Konsumen Anda adalah pihak ketiga yang mengharapkan semantik REST konvensional.

Perbandingan Singkat dengan PHP

Berikut data yang sama, dirangkai dengan cara REST di PHP—perhatikan bahwa klien tetap memerlukan beberapa panggilan atau Anda harus membuat parameter penyematan secara manual. GraphQL justru memindahkan logika pemilihan itu ke klien.

<?php
// REST: server decides the payload shape
function userResource(int $id): array {
    return [
        'id' => $id,
        'name' => 'Ada',
        'email' => 'ada@example.com',   // over-fetched by mobile
        'createdAt' => '1815-12-10',
        'posts' => [                       // pre-embedded, all-or-nothing
            ['title' => 'On Engines', 'commentCount' => 12],
        ],
    ];
}

header('Content-Type: application/json');
echo json_encode(userResource(1), JSON_PRETTY_PRINT);

Biaya Tambahan GraphQL

GraphQL memindahkan kerumitan ke peladen. Hal-hal baru yang kini harus Anda tangani:

  • Kueri N+1 — penyelesai bertingkat menjalankan satu kueri basis data untuk setiap simpul, kecuali Anda melakukan pengelompokan (DataLoader).
  • Biaya kueri/pembatasan kedalaman — kueri bertingkat sangat dalam yang berbahaya dapat menyebabkan penolakan layanan.
  • Penembolokan lebih sulit; biasanya Anda menembolok pada lapisan penyelesai/data, bukan HTTP.
  • Penanganan galat berbeda — 200 OK tetap dapat membawa larik errors.

Galat: 200 dengan Larik Galat

Berbeda dari kode status REST, GraphQL secara konvensional mengembalikan HTTP 200 dan melaporkan kegagalan sebagian di dalam isi respons. data dapat terisi sebagian, sementara errors mencantumkan hal-hal yang gagal. Klien Anda harus memeriksa keduanya.

{
  "data": { "user": null },
  "errors": [
    {
      "message": "User not found",
      "path": ["user"],
      "extensions": { "code": "NOT_FOUND" }
    }
  ]
}

Heuristik Pengambilan Keputusan

Aturan praktis:

  • API publik yang banyak menggunakan tembolok dan CRUD sumber daya → REST.
  • API internal/produk yang menyuplai klien berfitur lengkap dan beragam melalui data yang saling terhubung → GraphQL.
  • Banyak sistem sisi belakang yang perlu disatukan di balik satu kontrak bertipe → gerbang GraphQL.

Umum dan sehat untuk menjalankan keduanya: REST untuk panggilan balik web/unggahan, GraphQL untuk graf data yang dibaca aplikasi.

Menyajikan GraphQL melalui HTTP di PHP

Secara operasional, titik akhir GraphQL di PHP merupakan satu rute yang membaca isi JSON, mengambil query dan variables, mengeksekusinya terhadap skema, lalu mengembalikan { data, errors }. Dibandingkan dengan banyak rute REST, transportasinya seragam—semua variasi berada dalam string kueri yang dikirim klien.

<?php
// Minimal GraphQL-over-HTTP entry point
$input = json_decode(file_get_contents('php://input'), true) ?? [];
$query = $input['query'] ?? '';
$variables = $input['variables'] ?? null;

// $result = GraphQL::executeQuery($schema, $query, null, $ctx, $variables);
// header('Content-Type: application/json');
// echo json_encode($result->toArray());
var_dump(['query' => $query, 'variables' => $variables]);

Pemeriksaan Singkat

Kapan REST tetap memiliki keunggulan yang jelas dibandingkan GraphQL?

Rangkuman

Anda telah membandingkan GraphQL dan REST secara substantif:

  • GraphQL mengatasi pengambilan data berlebih/kurang dengan satu titik akhir bertipe dan pemilihan yang dikendalikan klien.
  • GraphQL unggul untuk banyak klien, data berbentuk graf, dan agregasi sisi belakang.
  • REST tetap kuat untuk API publik yang dapat ditembolok, CRUD sederhana, unggahan, dan konsumen konvensional.
  • GraphQL mengalihkan biaya ke peladen: N+1, batas biaya kueri, penembolokan, dan semantik 200-dengan-galat.

Berikutnya: benar-benar membangun skema dengan webonyx/graphql-php.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “GraphQL vs REST” gratis?

Ya — teks lengkap “GraphQL vs REST” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “GraphQL vs REST”?

Pahami kapan GraphQL lebih unggul daripada REST dan alasannya. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “GraphQL vs REST” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. GraphQL vs REST
  2. Membangun Skema dengan graphql-php
  3. Resolver, Mutasi, dan Langganan
  4. Kinerja: N+1 dan DataLoader
← Kembali ke PHP Academy