Arsitektur
ArsitekturMenangani direktif tipe skema

Menangani direktif tipe skema

Gato GraphQL adalah server code-first, yaitu menggunakan kode untuk mengembangkan skema. (Alternatifnya adalah pendekatan SDL-first, yang menggunakan Schema Definition Language untuk terlebih dahulu menghasilkan skema kemudian mengembangkan layanannya).

Karena tidak memiliki SDL, server code-first tidak dapat mendukung direktif tipe skema secara alami. Untuk menghindari keterbatasan ini, Gato GraphQL telah mengembangkan mekanisme berikut:

Hasilnya adalah dukungan penuh untuk direktif tipe skema pada server GraphQL.

Mengapa ini berhasil?

@deprecated adalah direktif tipe skema, sehingga harus diterapkan pada skema. Namun, apa yang akan terjadi jika untuk sesaat kita berpura-pura bahwa itu adalah direktif tipe query, dan menambahkan @deprecated pada suatu field langsung dalam query?

Misalnya, ketika mengeksekusi query ini:

query {
  posts {
    id
    title
    content @deprecated(reason: "Use newContent instead")
  }
}

Ternyata bisa berfungsi juga! Karena, pada akhirnya, direktif hanyalah suatu fungsionalitas yang dieksekusi pada field; mendeklarasikan fungsionalitas tersebut melalui skema, atau langsung dalam query, tidak membuat fungsionalitas itu berperilaku berbeda.

Namun, meskipun berhasil, hal ini tidak masuk akal. Kita tidak bisa memaksa klien untuk menambahkan @deprecated pada query mereka. Ini adalah fungsionalitas yang diputuskan oleh aplikasi di sisi server, bukan di sisi klien.

Meski demikian, fungsionalitas itu sendiri tetap bekerja. Oleh karena itu, apakah direktif ditambahkan ke skema atau ke query tidak menjadi masalah dari sudut pandang fungsional. Terlebih lagi, setiap direktif pada akhirnya akan ada dalam query, karena di sanalah direktif tersebut dieksekusi.

Dengan demikian, jika server tidak memiliki SDL, ia tetap dapat menyematkan direktif ke dalam query pada saat runtime.