Konsep, Ide, Strategi
Konsep, Ide, StrategiKemiripan antara hooks WordPress dan direktif GraphQL

Kemiripan antara hooks WordPress dan direktif GraphQL

Aplikasi WordPress sangat dapat dikembangkan melalui plugin dan penggunaan hooks (actions dan filters) untuk mengubah perilaku suatu potongan kode (baik dari inti WordPress, tema, maupun plugin). Hooks adalah potongan kode sederhana yang dapat menimpa sebuah nilai, atau menjalankan suatu aksi, setiap kali dipicu.

Dalam contoh ini, filter block_categories memungkinkan modifikasi kategori blok yang diaktifkan di editor WordPress:

\add_filter(
  'block_categories',
  function(array $categories): array
  {
    return [
      ...$categories,
      [
        'slug' => 'graphql-api-access-control',
        'title' => __('Access Control for GraphQL', 'graphql-api'),
      ],
    ];
  }
);

Hooks bersifat sederhana, serbaguna, dan powerful; mereka bisa disalahgunakan, tetapi jika diimplementasikan dengan baik, mereka membuat aplikasi menjadi sangat dapat dikembangkan dengan cara-cara yang tidak direncanakan sebelumnya oleh pengembang.

Direktif GraphQL sebagai hooks

Direktif dapat dianggap sebagai padanan hooks di WordPress, namun untuk GraphQL.

Serupa dengan hook WordPress, sebuah direktif adalah fungsi yang mengubah nilai sebuah field, sehingga memperluas fungsionalitas lainnya. Seperti padanannya, direktif bersifat sederhana, serbaguna, dan powerful.

Misalnya, katakanlah kita mengambil daftar judul postingan dengan query ini:

query {
  posts {
    title
  }
}

Hasil ini dalam bahasa Inggris. Bagaimana kita bisa menerjemahkannya ke bahasa Prancis? Dengan direktif @strTranslate yang diterapkan pada field title, yang mengambil nilai field tersebut sebagai input, memanggil Google Translate API untuk menerjemahkannya, dan mengembalikan output ini, seperti dalam query ini:

query {
  posts {
    title @strTranslate(from: "en", to: "fr")
  }
}

Kasus penggunaan untuk ekstensibilitas sangat jelas: diberikan sebuah nilai untuk field title, kita dapat mengubahnya dengan cara apa pun yang diinginkan melalui sebuah direktif. Dalam hal ini, modifikasinya adalah penerjemahan ke bahasa Prancis melalui @strTranslate, tetapi bisa juga mengonversinya ke huruf besar/kecil melalui @strUpperCase dan @strLowerCase, atau hal lainnya.