emsifa / contoh-graphql-php-mysql

Contoh GraphQL pada PHP dengan MySQL dan PDO
24 stars 13 forks source link

Contoh GraphQL pada PHP dengan MySQL dan PDO

Apa itu GraphQL?

Singkatnya GraphQL adalah sebuah bahasa query (query language) untuk API. GraphQL memberikan kemudahan pada client-side untuk mendapatkan data yang dibutuhkan.

Contoh, kamu menginginkan data detail produk dengan daftar review produk tersebut. Pada mekanisme REST biasa, kamu akan membutuhkan beberapa endpoint seperti:

Atau sebuah endpoint khusus untuk menangani kasus tersebut, semisal:

Masalah pada mekanisme REST tersebut adalah:

Yang terjadi adalah kamu membutuhkan banyak endpoint untuk menangani kasus-kasus tersebut. Dan jangan lupa, pada setiap endpoint kamu harus melakukan validasi, filtrasi, resolving, dsb. Hal itu sangat merepotkan.

Dengan GraphQL kamu cukup membuat sebuah endpoint untuk menangani berbagai kemungkinan tersebut.

GraphQL pada PHP

Pada repository ini, saya menggunakan library 'webonyx/graphql-php'. Untuk data resourcenya menggunakan database MySQL dan ekstensi PDO. Untuk datanya sendiri saya generate menggunakan library faker.

Kebutuhan

Sebetulnya saya kurang tau persis kebutuhannya seperti apa. Diatas itu nebak-nebak aja :p

Saya sendiri menggunakan software dengan spesifikasi sebagai berikut:

Dicoba-coba aja. Untuk PHP sendiri versi 5.5 sepertinya bisa. Untuk server seharusnya apache, nginx, dsb juga bisa.

Instalasi

Pengguna Windows dan XAMPP

Pengguna PHP Built-in Server

Konfigurasi

Ada beberapa hal yang harus disesuaikan sebelum nyoba. Buka file graphql.php, lalu sesuaikan beberapa hal berikut:

Jalankan GraphQL

Disini karena saya menggunakan php built-in server, jadi endpoint graphql saya berada di url http://localhost:3000/graphql.php. Untuk kamu pengguna XAMPP silahkan akses localhost/<foldernya>/graphql.php.

Untuk mencoba graphql, silahkan buka browser, cobalah beberapa url berikut:

Untuk mencoba query yang lebih rumit, umumnya developer akan menggunakan GraphiQL. Tapi karena setupnya yang cukup memakan waktu, kamu dapat memakai ekstensi google chrome GraphiQL Feen

Setelah menginstall, buka ekstensi tersebut, masuk ke tab server, masukkan server url menjadi http://localhost:3000/graphql.php.

Kemudian silahkan coba query dibawah ini:

{

  user(id: 5) {
    id
    name
    email
  }
  product(id: 10) {
    id
    name
    url_thumbnail
    images {
      id
      url
    }
    reviews {
      message
      star
      user {
        name
        id
      }
    }
  }
  products(limit:5) {
    id
    slug
    name
    weight
    price
  }
  productCategories {
    id
    slug
    name
    products(limit:3) {
      id
      name
      slug
    }
  }
}

Hasilnya akan seperti ini:

Contoh hasil

Penutup

GraphQL adalah masa depan pengembangan website. Untuk kamu yang tertarik dengan graphql, saya menaruh penjelasan pada scriptnya. Pada graphql.php juga saya menyertakan beberapa bahan latihan yang ditandai dengan @Latihan. Silahkan coba jika kamu merasa tertantang.

Apa yang saya coba disini adalah dasarnya, ada beberapa bad practice yang seharusnya diperbaiki.

Untuk langkah selanjutnya, silahkan pelajari DataLoader untuk optimasi pada sisi server (versi PHP-nya disini). Untuk kalian yang suka menggunakan React.js, silahkan pelajari relay (library tambahan server-side PHP-nya disini).