Gato GraphQL vs WPGraphQL
So sánh giữa Gato GraphQL và WPGraphQL


Nếu bạn chỉ cần xây dựng một trang WordPress headless và triển khai nó dưới dạng tĩnh, và hiện đang sử dụng WPGraphQL, thì việc chuyển sang Gato GraphQL sẽ không tạo ra bất kỳ sự khác biệt nào.
Trong các trường hợp khác, việc chuyển sang Gato GraphQL mang lại nhiều lợi thế. Dưới đây là những lợi ích do Gato GraphQL + tất cả các tiện ích mở rộng cung cấp mà WPGraphQL không có.
Bảng tóm tắt
| Tính năng | Gato GraphQL | WPGraphQL |
|---|---|---|
| Vấn đề N+1 Query | Không phải vấn đề do thiết kế kiến trúc | Có thể là vấn đề nếu không được xử lý; nhà phát triển phải chú ý |
| Bảo mật: Vô hiệu hóa Endpoint | Có thể vô hiệu hóa hoàn toàn endpoint đơn với persisted queries (PRO) | Không có |
| Kiểm soát truy cập | Xác thực từng trường, với vai trò/quyền hạn/IP, qua giao diện người dùng (PRO) | Không ở cấp độ trường, kém chi tiết hơn |
| Kiểm soát bộ nhớ đệm | max-age được tính tự động cho các queries (PRO) | Không có kiểm soát bộ nhớ đệm tự động |
| Endpoint tùy chỉnh | Nhiều endpoint, được bảo vệ bằng mật khẩu/có thể tùy chỉnh; hỗ trợ phân cấp endpoint (PRO) | Endpoint đơn, tùy chỉnh hạn chế |
| Cập nhật hàng loạt & Tìm/Thay thế | Xóa hàng loạt, gán thẻ, thay thế (với regex), qua GraphQL (PRO) | Không có |
| Tính năng GraphQL tùy chỉnh/thử nghiệm | Nested mutations, schema namespacing, oneOf input object | Chủ yếu tuân theo đặc tả GraphQL chuẩn |
| Multiple Query Execution (Khả năng kết hợp) | Nhiều queries trong một tài liệu, chia sẻ trạng thái với @export | Batch queries (nhiều trên mỗi yêu cầu), nhưng không thể chia sẻ trạng thái |
| Endpoint nội bộ/riêng tư | Endpoint riêng tư chỉ dành cho backend/PHP, không tiếp xúc với người dùng (PRO) | Không có |
| Thao tác dữ liệu phong phú | Truy xuất, sửa đổi và lưu trữ dữ liệu trong một tài liệu (PRO) | Không hỗ trợ |
| Đồng bộ & Phân phối nội dung | Import/export qua GraphQL, RSS, CSV, REST API (PRO) | Không có |
| Tích hợp dịch vụ web | Gọi API đi/đến và webhook (PRO) | Không hỗ trợ |
| Tự động hóa (Hook/Quy trình) | GraphQL như công cụ tự động hóa quy trình làm việc (PRO/trình soạn thảo UI) | Không có |
| Dễ sử dụng (Tích hợp UI) | Nhiều tính năng UI phong phú để xây dựng/quản lý các queries GraphQL | Giao diện quản trị cơ bản hơn |
| Batching/Khả năng kết hợp | Kết hợp các trường/directive, logic resolver có thể tái sử dụng (PRO) | Không hỗ trợ |
| Multiple Query Execution | Được hỗ trợ, với trạng thái chia sẻ và phụ thuộc | Được hỗ trợ, không chia sẻ trạng thái |
| Sử dụng Headless/Tĩnh chuẩn | Cả hai đều có khả năng tương đương | Cả hai đều có khả năng tương đương |
Chú giải:
- (PRO): Cho biết tính năng yêu cầu phiên bản trả phí/pro hoặc tiện ích mở rộng của Gato GraphQL.
Tóm tắt các điểm chính:
- Gato GraphQL cung cấp nhiều tính năng bổ sung quan trọng cho phát triển nâng cao, tự động hóa và bảo mật
- Cả hai plugin đều tương đương cho các cài đặt WordPress tĩnh/headless cơ bản
- Các tính năng nâng cao trong Gato GraphQL tập trung vào:
- Kiểm soát chi tiết
- Tự động hóa quy trình làm việc
- Tích hợp phong phú
- Các tính năng GraphQL thử nghiệm hiện đại
Dễ dàng phát triển
Các nhà phát triển không cần lo lắng về vấn đề "n+1" query: Do thiết kế kiến trúc của máy chủ GraphQL, vấn đề này đơn giản là không xảy ra.
Bảo mật
Khi sử dụng persisted queries để hiển thị dữ liệu được xác định trước, bạn có thể vô hiệu hóa hoàn toàn endpoint GraphQL đơn, sao cho nó không thể truy cập ngay cả đối với người dùng đã xác thực.

Kiểm soát truy cập
Bạn có thể xác thực rằng chỉ những người dùng đã đăng nhập, hoặc người dùng có vai trò hoặc quyền hạn nhất định, hoặc khách truy cập từ một dải IP nhất định, mới có thể truy cập dữ liệu, trên cơ sở từng trường (PRO).

Kiểm soát bộ nhớ đệm
Khi lưu vào bộ nhớ đệm phản hồi GraphQL bằng cách sử dụng HTTP caching chuẩn, header max-age được tính toán tự động từ tất cả các trường có trong GraphQL query (PRO).

Tùy chỉnh và quản lý endpoint
Bạn có thể cung cấp nhiều endpoint tùy chỉnh, mỗi endpoint được tùy chỉnh cho một khách hàng hoặc ứng dụng cụ thể, bảo vệ chúng bằng mật khẩu.
Và bạn có thể thêm danh mục tùy chỉnh cho chúng và cấp cho chúng một phân cấp (chẳng hạn như /graphql/customers/some-customer và /graphql/customers/another-customer).

Cập nhật hàng loạt
Bạn có thể thực hiện các cập nhật hàng loạt. Ví dụ, bạn có thể xóa tất cả các bình luận trên trang web, hoặc gán một thẻ hoặc danh mục cho tất cả các bài viết của bạn.
Và bạn có thể tìm kiếm và thay thế một chuỗi trong hàng trăm bài viết, chẳng hạn để thay thế tên miền cũ bằng tên miền mới, thậm chí sử dụng regex (PRO).
Tính năng GraphQL tùy chỉnh
Bạn sẽ có quyền truy cập vào các tính năng GraphQL mới, được đề xuất cho đặc tả nhưng chưa được phát hành, bao gồm nested mutations, schema namespacing và 'oneOf' Input Object.

Multiple Query Execution
WPGraphQL cho phép thực thi queries theo batch, trong đó nhiều queries GraphQL được giải quyết trong một yêu cầu HTTP duy nhất.
Gato GraphQL cung cấp Multiple Query Execution, trong đó một tài liệu GraphQL duy nhất có thể thực thi nhiều thao tác.
Multiple Query Execution là sự cải tiến so với query batching, vì các thao tác có thể chia sẻ trạng thái với nhau thông qua directive @export.
Ví dụ, để nhân đôi một bài viết, chúng ta có một thao tác query lấy dữ liệu bài viết, và truyền dữ liệu này cho một thao tác mutation tạo bài viết mới từ đó:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Khả năng kết hợp
Bạn sẽ có khả năng kết hợp các trường, trong đó giá trị của một trường có thể được cung cấp làm đầu vào cho một trường khác trong cùng một query, cho phép một tập hợp cơ bản các field resolver bao phủ vô số trường hợp sử dụng (PRO).
Ví dụ, thay vì tạo trường Post.hasExcerpt, chúng ta có thể áp dụng trường _notEmpty trên Post.excerpt để tạo ra cùng một giá trị:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Tương tự, bạn có thể kết hợp các directive, để một directive có thể được áp dụng trên một thuộc tính bên trong từ giá trị của trường.
Ví dụ, query sau đây dịch tên danh mục của bài viết sang ngôn ngữ khác:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Tính khả dụng của máy chủ GraphQL
Bạn có thể hiển thị các endpoint riêng tư để cung cấp nguồn dữ liệu cho các khối Gutenberg của bạn. Và bạn có thể truy cập một máy chủ GraphQL riêng tư, để lấy dữ liệu cho ứng dụng của bạn bằng code PHP, mà không cần hiển thị bất kỳ endpoint công khai nào (PRO).
Tính linh hoạt trong việc thao tác dữ liệu
Bạn có thể sử dụng GraphQL để truy xuất, sửa đổi và cuối cùng lưu lại nội dung trên trang web của bạn, tất cả trong một tài liệu GraphQL duy nhất (PRO).
Ví dụ, bạn có thể lấy tất cả các khối Gutenberg trong một bài viết, trích xuất thuộc tính của chúng, dịch các chuỗi đó qua Google Translate API, chèn lại các chuỗi đó vào khối, và lưu lại bài viết.
Đồng bộ và phân phối nội dung
Bạn có thể sử dụng GraphQL để nhập bài viết từ một trang WordPress khác, từ một RSS feed, từ CSV, hoặc từ bất kỳ REST hoặc GraphQL API nào (PRO).
Bạn có thể xuất nội dung sang một trang WordPress khác, và lưu trữ dưới dạng JSON và CSV (PRO).
Tương tác với dịch vụ web
Bạn có thể gọi API của bất kỳ dịch vụ bên ngoài nào qua HTTP client (PRO). Ví dụ, bạn có thể đăng ký người dùng WordPress của mình vào danh sách email Mailchimp.
Và bạn có thể nhận và xử lý dữ liệu đến từ bất kỳ dịch vụ nào qua một webhook chuyên dụng (PRO). Ví dụ, bạn có thể thu thập các email newsletter đã đăng ký trong một trang sandbox InstaWP và tự động gửi chúng đến Mailchimp.
Tự động hóa
Bạn có thể sử dụng GraphQL để tự động hóa các tác vụ và quy trình nội dung (PRO).
Ví dụ, khi một bài viết mới được tạo (sự kiện qua hook draft_post) bạn có thể thực thi một persisted query kiểm tra xem bài viết có thumbnail hay không và, trong trường hợp không có, tạo một hình ảnh bằng cách gọi Stable Diffusion API, nén nó qua TinyPng, và cuối cùng chèn hình ảnh làm ảnh đại diện của bài viết.

Dễ sử dụng
Tất cả các trường hợp sử dụng bổ sung này có thể được thực hiện trực tiếp trong wp-admin, cung cấp GraphQL query thông qua giao diện người dùng, mà không cần triển khai bất kỳ code PHP nào.
