Kavramlar, Fikirler, Stratejiler
Kavramlar, Fikirler, StratejilerWordPress Hook'ları ve GraphQL Direktifleri Arasındaki Benzerlikler

WordPress Hook'ları ve GraphQL Direktifleri Arasındaki Benzerlikler

Bir WordPress uygulaması, eklentiler ve bazı kod parçalarının davranışını değiştirmek için kullanılan hook'lar (eylemler ve filtreler) sayesinde son derece genişletilebilir bir yapıya sahiptir (WordPress çekirdeği, tema veya eklentiler tarafından sağlanan kodlar dahil). Hook'lar, tetiklendiklerinde bir değeri geçersiz kılabilen veya bir eylem gerçekleştirebilen basit kod parçalarıdır.

Bu örnekte, block_categories filtresi WordPress editöründe etkin olan blok kategorilerini değiştirmeye olanak tanır:

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

Hook'lar basit, çok yönlü ve güçlüdür; kötüye kullanılabilirler, ancak iyi uygulandıklarında geliştiricinin önceden planlamadığı şekillerde uygulamayı büyük ölçüde genişletilebilir hale getirirler.

Hook Olarak GraphQL Direktifleri

Direktifler, GraphQL için hook'ların WordPress'e olan eşdeğeri olarak değerlendirilebilir.

Bir WordPress hook'una benzer şekilde, bir direktif, bir alanın değerini değiştiren ve böylece başka bir işlevselliği genişleten bir fonksiyondur. Karşılığı gibi, basit, çok yönlü ve güçlüdür.

Örneğin, şu query ile bir gönderi başlıkları listesini getirdiğimizi varsayalım:

query {
  posts {
    title
  }
}

Bu sonuçlar İngilizce'dir. Bunları Fransızca'ya nasıl çevirebiliriz? title alanına uygulanan @strTranslate direktifiyle; bu direktif alanın değerini girdi olarak alır, Google Translate API'sini çağırarak çevirir ve şu query'de olduğu gibi bu çıktıyı döndürür:

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

Genişletilebilirlik kullanım senaryosu açıktır: title alanı için verilen bir değeri, bir direktif aracılığıyla istenen herhangi bir şekilde değiştirebiliriz. Bu durumda değişiklik, @strTranslate aracılığıyla Fransızca'ya çeviridir; ancak @strUpperCase ve @strLowerCase ile büyük/küçük harfe dönüştürme veya başka herhangi bir şey de olabilir.