Sự tương đồng giữa WordPress hooks và GraphQL directives
Một ứng dụng WordPress có khả năng mở rộng cao thông qua các plugin và việc sử dụng hooks (actions và filters) để thay đổi hành vi của một đoạn mã nào đó (dù là của WordPress core, theme hay plugin). Hooks là những đoạn mã đơn giản có thể ghi đè một giá trị, hoặc thực thi một hành động, bất cứ khi nào được kích hoạt.
Trong ví dụ này, filter block_categories cho phép thay đổi các danh mục block được bật trong trình soạn thảo WordPress:
\add_filter(
'block_categories',
function(array $categories): array
{
return [
...$categories,
[
'slug' => 'graphql-api-access-control',
'title' => __('Access Control for GraphQL', 'graphql-api'),
],
];
}
);Hooks đơn giản, linh hoạt và mạnh mẽ; chúng có thể bị lạm dụng, nhưng nếu được triển khai tốt, chúng giúp ứng dụng có thể mở rộng theo những cách mà nhà phát triển không lên kế hoạch trước.
GraphQL directives như là hooks
Directives có thể được xem là tương đương trong GraphQL với những gì hooks là đối với WordPress.
Tương tự như một WordPress hook, một directive là một hàm sửa đổi giá trị của một trường, qua đó mở rộng thêm một số chức năng khác. Giống như đối tác của nó, directive đơn giản, linh hoạt và mạnh mẽ.
Chẳng hạn, giả sử chúng ta lấy danh sách tiêu đề bài viết bằng query này:
query {
posts {
title
}
}Các kết quả này bằng tiếng Anh. Làm thế nào để dịch chúng sang tiếng Pháp? Bằng cách dùng directive @strTranslate áp dụng lên trường title, nó lấy giá trị của trường làm đầu vào, gọi API Google Translate để dịch, và trả về đầu ra này, như trong query sau:
query {
posts {
title @strTranslate(from: "en", to: "fr")
}
}Trường hợp sử dụng cho khả năng mở rộng rất rõ ràng: với một giá trị của trường title, chúng ta có thể sửa đổi nó theo bất kỳ cách nào mong muốn thông qua một directive. Trong trường hợp này, sự sửa đổi là dịch sang tiếng Pháp thông qua @strTranslate, nhưng cũng có thể là chuyển đổi thành chữ hoa/chữ thường thông qua @strUpperCase và @strLowerCase, hoặc bất kỳ thứ gì khác.