Membuat API
Membuat APIMenambahkan cache HTTP

Menambahkan cache HTTP

Ketika query dieksekusi terhadap server GraphQL menggunakan GET (sebagai pengganti metode POST yang lebih tradisional), respons GraphQL dapat di-cache di sisi klien atau pada tahap perantara antara klien dan server (seperti CDN), dengan mengandalkan cache HTTP standar.

Ini berjalan secara alami untuk persisted query, dan untuk single endpoint serta custom endpoint dapat bekerja dengan menambahkan parameter ?query={ GraphQL query } ke endpoint.

Konfigurasi dibuat melalui daftar kontrol cache, dan dikirimkan ke endpoint melalui konfigurasi skema.

Mengeksekusi endpoint melalui GET

Persisted query sudah cocok untuk dieksekusi melalui GET, karena menyimpan query GraphQL di server (yaitu tidak perlu disertakan dalam body permintaan).

Untuk single endpoint dan custom endpoint, query harus disertakan di bawah parameter ?query=... yang ditambahkan ke URL endpoint.

Sebagai contoh, query GraphQL berikut:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...dapat dieksekusi melalui GET terhadap single endpoint seperti ini:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

Perhitungan max-age otomatis

Nilai max-age respons dihitung secara otomatis dari daftar kontrol akses yang ditetapkan ke endpoint (melalui konfigurasi skema).

Nilai ini adalah nilai max-age terendah dari semua field dan directive dalam query yang diminta, atau no-store jika salah satu dari kondisi berikut terpenuhi:

  • ada mutasi yang dieksekusi
  • field atau directive mana pun memiliki max-age dengan nilai 0
  • aturan kontrol akses harus memeriksa status pengguna untuk field atau directive mana pun (dalam hal ini, respons bersifat spesifik untuk pengguna, sehingga tidak dapat di-cache)

Max-age default

Field yang tidak memiliki max-age spesifik akan menggunakan nilai default, yang ditentukan dalam Konfigurasi Skema:

Nilai max-age default dalam Konfigurasi Skema

Jika tidak diatur, nilai max-age default yang ditentukan di halaman Pengaturan, di bawah tab "Cache Control", akan digunakan. Nilai ini, yaitu 86400 detik, dapat diubah di Pengaturan.

Contoh

Misalkan kita memiliki konfigurasi nilai max-age berikut untuk field dari tipe User:

  • name => 600
  • url => 30

Maka, respons terhadap query ini akan memiliki nilai max-age yang diatur ke 86400 (karena baik displayName maupun email belum dikonfigurasi, sehingga menggunakan nilai default):

query {
  users {
    displayName
    email
  }
}

Respons terhadap query ini akan memiliki nilai max-age yang diatur ke 30 (sesuai dengan url, yang merupakan nilai terendah dari semua field yang dikonfigurasi):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

Respons terhadap query ini akan memiliki nilai max-age yang diatur ke no-store (karena field me memerlukan status pengguna):

query {
  me {
    name
    url
  }
}

Respons terhadap query ini akan memiliki nilai max-age yang diatur ke no-store (karena mengeksekusi mutasi):

mutation {
  createPost {
    id
  }
}

Mengakses semua daftar kontrol cache

Dengan mengeklik "Cache Control Lists" di menu plugin, daftar semua daftar kontrol cache yang telah dibuat akan ditampilkan:

Daftar kontrol cache di admin
Daftar kontrol cache di admin

Membuat daftar kontrol cache baru

Klik tombol "Add New Cache Control List" untuk membuka editor WordPress:

Membuat daftar kontrol cache

Berikan judul pada daftar kontrol cache, tambahkan entri dengan field dan directive, serta konfigurasikan nilai max-age untuk masing-masing:

Membuat daftar kontrol cache

Setelah siap, klik tombol Publish. Kemudian, daftar kontrol cache baru tersebut akan tersedia untuk konfigurasi skema.

Entri Cache Control

Setiap Cache Control List memuat satu atau banyak entri, masing-masing dengan elemen-elemen berikut:

  • Field yang dikonfigurasi untuk cache
  • Directive yang dikonfigurasi untuk cache
  • Nilai max-age untuk masing-masing

Entri kontrol akses

Memilih field dari interface

Selain field dari tipe, kita juga dapat memilih field dari interface. Dalam hal ini, nilai max-age diterapkan saat melakukan query pada field tersebut dari tipe apa pun yang mengimplementasikan interface tersebut.

Memilih field dari sebuah interface
Memilih field dari sebuah interface

Mendeskripsikan daftar kontrol cache

Gunakan field "Excerpt", dari panel pengaturan Dokumen, untuk memberikan deskripsi pada daftar kontrol cache.

Temukan informasi lebih lanjut di panduan Menambahkan deskripsi ke API.

Menggunakan daftar kontrol cache

Setelah membuat daftar kontrol cache, kita dapat membuat Custom Endpoint atau Persisted Query menggunakannya dengan mengedit Konfigurasi Skema yang sesuai, dan memilih ACL dari daftar di bawah blok "Cache Control Lists".

Memilih daftar kontrol cache dalam Konfigurasi Skema

Jika tidak menyesuaikan konfigurasi, Cache Control Lists default yang ditentukan di halaman Pengaturan, di bawah tab "Cache Control", akan digunakan:

Memilih Cache Control Lists default di halaman Pengaturan