Gato GraphQL vs WP REST API
So sánh giữa Gato GraphQL và WP REST API


Sự khác biệt giữa REST và GraphQL API nhìn chung đều có giá trị khi đối chiếu WP REST API với Gato GraphQL.
Với GraphQL, bạn có thể thực thi một queries GraphQL tùy chỉnh tới một endpoint, chỉ định chính xác dữ liệu bạn cần và chỉ lấy dữ liệu đó trong một yêu cầu duy nhất.
Ví dụ, queries GraphQL sau đây sẽ lấy dữ liệu cần thiết cho một bài viết cụ thể, bao gồm dữ liệu từ các quan hệ của nó (tác giả, danh mục và thẻ), tất cả trong một yêu cầu duy nhất:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}Để lấy cùng dữ liệu với REST, bạn có thể cần thực hiện trước một yêu cầu để lấy dữ liệu bài viết, rồi một yêu cầu tiếp theo cho mỗi quan hệ của nó (tác giả, danh mục và thẻ) để lấy dữ liệu tương ứng.
Những khác biệt về kiến trúc giữa REST và GraphQL đã được đề cập rộng rãi ở nơi khác, vì vậy từ đây trở đi, chúng tôi sẽ không lặp lại chúng nữa.
Dưới đây, hãy cùng thực hiện so sánh cụ thể hơn giữa Gato GraphQL cùng tất cả các tiện ích mở rộng và WP REST API.
Bảng tóm tắt
| Tính năng | Gato GraphQL | WP REST API |
|---|---|---|
| Lấy dữ liệu | Thực thi queries GraphQL tùy chỉnh tới một endpoint, lấy dữ liệu cụ thể trong một yêu cầu duy nhất. | Yêu cầu nhiều yêu cầu tới các endpoint khác nhau để lấy dữ liệu liên quan (ví dụ: dữ liệu bài viết, dữ liệu tác giả, danh mục và thẻ). |
| Endpoint | Hỗ trợ Persisted Queries, là các endpoint với dữ liệu được định sẵn, tạo bằng ngôn ngữ GraphQL qua giao diện người dùng trong wp-admin, không cần triển khai code. | Hiển thị dữ liệu qua các endpoint REST, mỗi endpoint có URL riêng và dữ liệu được định sẵn, được tạo qua code PHP và triển khai trong theme hoặc plugin. |
| Kiểm soát truy cập | Cung cấp tính linh hoạt với kiểm soát truy cập ở cấp độ trường dựa trên các quy tắc (ví dụ: vai trò người dùng, quyền hạn, phạm vi IP). | Giới hạn dữ liệu dựa trên tham số context (ví dụ: view cho người dùng chưa xác thực, edit cho người dùng đã xác thực với quyền phù hợp). |
| Thao tác hàng loạt | Hỗ trợ Multiple Query Execution, trong đó một tài liệu GraphQL có thể thực thi nhiều thao tác có thể chia sẻ trạng thái qua chỉ thị @export, cải thiện so với batch requests. | Cho phép batch requests, trong đó nhiều yêu cầu được xử lý nội bộ trong một yêu cầu HTTP duy nhất. |
| Quản lý trang web | Có thể lấy dữ liệu, chỉnh sửa và lưu lại trong một tài liệu GraphQL duy nhất qua giao diện người dùng, cho phép tự động hóa và quản lý các trang WordPress. Có thể thực hiện nhiệm vụ của nhiều plugin như nhân đôi, tự động hóa, sao lưu, tìm kiếm/thay thế, webhook và dịch thuật. Là một API và hơn thế nữa. | Chủ yếu là API để truy cập và thao tác dữ liệu WordPress. |
| Tính tổng quát | Công cụ tổng quát để quản lý các trang WordPress, có khả năng biến đổi dữ liệu và tích hợp với các dịch vụ bên thứ ba qua queries GraphQL. | Tập trung vào việc cung cấp API; cần các plugin bổ sung hoặc code tùy chỉnh để đạt được các chức năng tương tự. |
Tóm tắt các điểm chính:
- Lấy dữ liệu: Gato GraphQL sử dụng queries tùy chỉnh, còn WP REST API sử dụng nhiều yêu cầu endpoint.
- Endpoint: Gato GraphQL sử dụng persisted queries tạo qua giao diện người dùng, còn WP REST API sử dụng endpoint REST được code bằng PHP.
- Kiểm soát truy cập: Gato GraphQL cung cấp kiểm soát ở cấp độ trường, còn WP REST API sử dụng tham số context.
- Thao tác hàng loạt: Gato GraphQL sử dụng Multiple Query Execution, còn WP REST API sử dụng batch requests.
- Quản lý trang web: Gato GraphQL là công cụ toàn diện, còn WP REST API chủ yếu là API.
Truy cập dữ liệu được định sẵn
Với WP REST API, bạn hiển thị dữ liệu qua các endpoint REST. Mỗi endpoint có URL riêng và dữ liệu của nó được định sẵn (cho các tài nguyên tương ứng, chẳng hạn bài viết hoặc người dùng).
Tương tự như các endpoint REST, Gato GraphQL hỗ trợ Persisted Queries, cũng là các endpoint với dữ liệu được định sẵn. Yêu cầu một persisted query qua GET sẽ thực thi queries GraphQL được lưu trữ và tạo ra phản hồi JSON như mong đợi:

Sự khác biệt giữa chúng là trong khi các endpoint REST API được tạo qua code PHP và phải được triển khai trong theme hoặc plugin, thì các persisted queries của Gato GraphQL được tạo bằng ngôn ngữ GraphQL và được xuất bản qua giao diện người dùng (được hỗ trợ bởi trình soạn thảo WordPress) trong wp-admin, không cần triển khai bất kỳ code nào.

Các cơ chế bộ nhớ đệm tương tự có thể được áp dụng cho các endpoint REST và persisted queries GraphQL. Vì persisted query được truy cập qua endpoint riêng của nó, phản hồi của nó có thể được lưu vào bộ nhớ đệm bằng bộ nhớ đệm HTTP tiêu chuẩn (PRO).
Kiểm soát truy cập
Việc giới hạn dữ liệu trong WP REST API phụ thuộc vào tham số context. Truyền ?context=view tạo ra dữ liệu cho người dùng chưa xác thực, và ?context=edit bao gồm dữ liệu bổ sung cho người dùng đã xác thực (với quyền phù hợp), chẳng hạn trường content.raw của bài viết.
Gato GraphQL cung cấp tính linh hoạt cao hơn nhiều, với từng trường riêng lẻ có thể truy cập được hay không dựa trên các quy tắc Kiểm soát truy cập. Bạn có thể xác thực rằng chỉ người dùng đã đăng nhập, hoặc người dùng có vai trò hoặc quyền nhất định, hoặc khách truy cập từ phạm vi IP nhất định, mới có thể truy cập một trường cụ thể (PRO).

Thao tác hàng loạt
WP REST API cho phép thực thi batch requests, trong đó nhiều yêu cầu được xử lý nội bộ 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 có thể thực thi nhiều thao tác.
Multiple Query Execution là một cải tiến so với batch requests, vì các thao tác có thể chia sẻ trạng thái với nhau qua chỉ thị @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
}
}Quản lý trang WordPress
Gato GraphQL cho phép chúng ta lấy dữ liệu từ cơ sở dữ liệu, chỉnh sửa theo yêu cầu và lưu lại, tất cả trong một tài liệu GraphQL duy nhất.
Điều này được thực hiện qua giao diện người dùng, để soạn thảo và xuất bản queries GraphQL, cấu hình các endpoint theo nhu cầu và tự động hóa việc thực thi một queries khi một sự kiện xảy ra.
Tất cả điều này có nghĩa là Gato GraphQL là công cụ tổng quát để quản lý các trang WordPress của chúng ta, đáp ứng những trường hợp sử dụng mà dữ liệu (từ trang WordPress, hay được cung cấp bởi các dịch vụ bên thứ ba) cần được biến đổi, vì điều này có thể thực hiện bằng cách thực thi một queries GraphQL.
Hãy chú ý Gato GraphQL có thể cung cấp chức năng của nhiều plugin:
- Không phải plugin nhân đôi, nhưng bạn có thể nhân đôi các bài viết với nó.
- Không phải plugin tự động hóa, nhưng bạn có thể tự động hóa các tác vụ của mình, không có bất kỳ hạn chế nào.
- Không phải plugin sao lưu, nhưng bạn có thể nhập và xuất bài viết.
- Không phải plugin tìm kiếm và thay thế, nhưng bạn có thể chỉnh sửa hàng loạt bài viết của mình.
- Không phải plugin webhook hay HTTP client, nhưng bạn có thể gửi yêu cầu tới bất kỳ API nào và nhận và xử lý các yêu cầu đến từ bất kỳ dịch vụ nào.
- Không phải plugin dịch thuật, nhưng bạn có thể dịch bất kỳ nội dung nào.
WP REST API chỉ là vậy, một API.
Gato GraphQL cũng là một API, nhưng còn nhiều hơn thế.
