Máy chủ GraphQL cho WordPress

Gato GraphQL vs WPGraphQL

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

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs 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ăngGato GraphQLWPGraphQL
Vấn đề N+1 QueryKhông phải vấn đề do thiết kế kiến trúcCó 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 EndpointCó 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ậpXá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ớ đệmmax-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ỉnhNhiề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ệmNested mutations, schema namespacing, oneOf input objectChủ 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 @exportBatch 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 dungImport/export qua GraphQL, RSS, CSV, REST API (PRO)Không có
Tích hợp dịch vụ webGọ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 GraphQLGiao diện quản trị cơ bản hơn
Batching/Khả năng kết hợpKế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ẩnCả hai đều có khả năng tương đươngCả 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.

Trình soạn thảo persisted query
Trình soạn thảo persisted query

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).

Trình soạn thảo Danh sách Kiểm soát Truy cập
Trình soạn thảo Danh sách Kiểm soát Truy cập

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).

Trình soạn thảo Danh sách Kiểm soát Bộ nhớ đệm

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/graphql/customers/another-customer).

Endpoint tùy chỉnh được bảo vệ bằng mật khẩu
Endpoint tùy chỉnh được bảo vệ bằng mật khẩu

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'oneOf' Input Object.

Schema tương tác với namespace
Schema tương tác với namespace

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.

Trình soạn thảo Quy tắc Tự động hóa
Trình soạn thảo Quy tắc Tự động hóa

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.

Đăng ký nhận bản tin của chúng tôi

Cập nhật tất cả những điều mới từ Gato GraphQL.