ความคล้ายคลึงกันระหว่าง WordPress hooks และ GraphQL directives
แอปพลิเคชัน WordPress มีความสามารถในการขยายฟังก์ชันได้สูง ผ่านปลั๊กอินและการใช้ hooks (actions และ filters) เพื่อปรับเปลี่ยนพฤติกรรมของโค้ดส่วนใดส่วนหนึ่ง ไม่ว่าจะเป็น WordPress core, ธีม หรือปลั๊กอิน hooks คือโค้ดขนาดเล็กที่สามารถแทนที่ค่า หรือดำเนินการบางอย่างได้เมื่อถูกเรียกใช้
ในตัวอย่างนี้ filter block_categories ช่วยให้สามารถแก้ไขหมวดหมู่บล็อกที่เปิดใช้งานใน WordPress editor ได้:
\add_filter(
'block_categories',
function(array $categories): array
{
return [
...$categories,
[
'slug' => 'graphql-api-access-control',
'title' => __('Access Control for GraphQL', 'graphql-api'),
],
];
}
);hooks นั้นเรียบง่าย ยืดหยุ่น และทรงพลัง แม้ว่าอาจถูกใช้ในทางที่ผิดได้ แต่หากนำไปใช้อย่างถูกต้อง จะทำให้แอปพลิเคชันสามารถขยายได้อย่างมากในแนวทางที่นักพัฒนาไม่ได้วางแผนไว้ล่วงหน้า
GraphQL directives ในฐานะ hooks
Directives สามารถถือได้ว่าเป็นส่วนที่เทียบเท่ากับ hooks ใน WordPress แต่อยู่ใน GraphQL
เช่นเดียวกับ WordPress hook, directive คือฟังก์ชันที่แก้ไขค่าของฟิลด์ จึงช่วยเสริมฟังก์ชันการทำงานอื่นๆ เช่นเดียวกับคู่เปรียบเทียบของมัน มันเรียบง่าย ยืดหยุ่น และทรงพลัง
ตัวอย่างเช่น สมมุติว่าเราดึงรายการชื่อโพสต์ด้วย query นี้:
query {
posts {
title
}
}ผลลัพธ์เหล่านี้เป็นภาษาอังกฤษ เราจะแปลเป็นภาษาฝรั่งเศสได้อย่างไร? ด้วยการใช้ directive @strTranslate บนฟิลด์ title ซึ่งรับค่าของฟิลด์เป็น input เรียก Google Translate API เพื่อแปล และส่งคืนผลลัพธ์ ดังใน query นี้:
query {
posts {
title @strTranslate(from: "en", to: "fr")
}
}กรณีการใช้งานสำหรับการขยายฟังก์ชันนั้นชัดเจน: เมื่อมีค่าสำหรับฟิลด์ title เราสามารถแก้ไขมันได้ตามต้องการผ่าน directive ในกรณีนี้คือการแปลเป็นภาษาฝรั่งเศสผ่าน @strTranslate แต่ยังอาจเป็นการแปลงเป็นตัวพิมพ์ใหญ่/เล็กผ่าน @strUpperCase และ @strLowerCase หรืออื่นๆ ก็ได้