Gato GraphQL vs WPGraphQL
การเปรียบเทียบระหว่าง Gato GraphQL และ WPGraphQL


หากคุณต้องการเพียงแค่สร้างเว็บไซต์ WordPress แบบ headless และ deploy เป็น static และปัจจุบันใช้ WPGraphQL อยู่ การเปลี่ยนมาใช้ Gato GraphQL จะไม่ทำให้เกิดความแตกต่างใดๆ
ในกรณีอื่นๆ การเปลี่ยนมาใช้ Gato GraphQL จะให้ประโยชน์มากมาย ต่อไปนี้คือฟีเจอร์ที่ Gato GraphQL + ส่วนขยายทั้งหมดมอบให้ ซึ่ง WPGraphQL ไม่มี
ตารางสรุปเปรียบเทียบ
| ฟีเจอร์ | Gato GraphQL | WPGraphQL |
|---|---|---|
| ปัญหา N+1 Query | ไม่เป็นปัญหาเนื่องจากการออกแบบสถาปัตยกรรม | อาจเป็นปัญหาหากไม่จัดการอย่างเหมาะสม นักพัฒนาต้องระวัง |
| ความปลอดภัย: ปิดใช้งาน Endpoint | สามารถปิดใช้งาน single endpoint ได้อย่างสมบูรณ์ด้วย persisted queries (PRO) | ไม่มีให้บริการ |
| การควบคุมการเข้าถึง | การตรวจสอบรายฟิลด์ ด้วย roles/capabilities/IP ผ่าน UI (PRO) | ไม่ระดับฟิลด์ มีความละเอียดน้อยกว่า |
| การควบคุม Cache | คำนวณ max-age อัตโนมัติสำหรับ queries (PRO) | ไม่มีการควบคุม cache อัตโนมัติ |
| Custom Endpoints | หลาย endpoints ที่ป้องกันด้วยรหัสผ่าน/ปรับแต่งได้ รองรับลำดับชั้น endpoint (PRO) | Single endpoint การปรับแต่งมีข้อจำกัด |
| อัปเดตแบบกลุ่ม & ค้นหา/แทนที่ | ลบ แท็ก แทนที่แบบกลุ่ม (รองรับ regex) ผ่าน GraphQL (PRO) | ไม่มีให้บริการ |
| ฟีเจอร์ GraphQL แบบกำหนดเอง/ทดลอง | Nested mutations, schema namespacing, oneOf input object | ส่วนใหญ่เป็นไปตามมาตรฐาน GraphQL spec |
| Multiple Query Execution (Composability) | หลาย queries ในเอกสารเดียว แบ่งปันสถานะด้วย @export | Batch queries (หลายรายการต่อ request) แต่ไม่สามารถแบ่งปันสถานะได้ |
| Internal/Private Endpoints | Private endpoint สำหรับ backend/PHP เท่านั้น ไม่เปิดเผยต่อผู้ใช้ (PRO) | ไม่มีให้บริการ |
| Rich Data Mutation | ดึงข้อมูล แก้ไข และบันทึกข้อมูลในเอกสารเดียว (PRO) | ไม่รองรับ |
| การซิงค์และแจกจ่ายเนื้อหา | นำเข้า/ส่งออกผ่าน GraphQL, RSS, CSV, REST API (PRO) | ไม่มีให้บริการ |
| การเชื่อมต่อ Web Service | การเรียก API ขาออก/ขาเข้า และ webhooks (PRO) | ไม่รองรับ |
| Automation (Hooks/Workflows) | ใช้ GraphQL เป็น workflow automation (PRO/UI editor) | ไม่มีให้บริการ |
| ความง่ายในการใช้งาน (UI Integration) | ฟีเจอร์ UI มากมายสำหรับสร้าง/จัดการ GraphQL queries | UI สำหรับผู้ดูแลระบบพื้นฐานกว่า |
| Batching/Composability | รวม fields/directives เข้าด้วยกัน ใช้ resolver logic ซ้ำได้ (PRO) | ไม่รองรับ |
| Multiple Query Execution | รองรับ พร้อมสถานะร่วมและ dependencies | รองรับ ไม่มีการแบ่งปันสถานะ |
| การใช้งาน Headless/Static มาตรฐาน | ทั้งสองมีความสามารถเท่าเทียมกัน | ทั้งสองมีความสามารถเท่าเทียมกัน |
ป้ายกำกับ:
- (PRO): หมายถึงฟีเจอร์นี้ต้องใช้เวอร์ชัน/ส่วนขยายแบบชำระเงิน/pro ของ Gato GraphQL
สรุปประเด็นสำคัญ:
- Gato GraphQL มีฟีเจอร์เพิ่มเติมที่สำคัญสำหรับการพัฒนาขั้นสูง automation และความปลอดภัย
- ทั้งสอง plugin มีความเท่าเทียมกันสำหรับการติดตั้ง WordPress แบบ static/headless พื้นฐาน
- ฟีเจอร์ขั้นสูงใน Gato GraphQL เน้นที่:
- การควบคุมแบบละเอียด
- Workflow automation
- การเชื่อมต่อที่หลากหลาย
- ฟีเจอร์ GraphQL ทดลองที่ทันสมัย
ความง่ายในการพัฒนา
นักพัฒนาไม่จำเป็นต้องกังวลเกี่ยวกับปัญหา "n+1" query: เนื่องจากการออกแบบสถาปัตยกรรมของ GraphQL server มันไม่เกิดขึ้นเลย
ความปลอดภัย
เมื่อใช้ persisted queries เพื่อเปิดเผยข้อมูลที่กำหนดไว้ล่วงหน้า คุณสามารถปิดใช้งาน GraphQL single endpoint ได้อย่างสมบูรณ์ ทำให้ไม่สามารถเข้าถึงได้แม้แต่ผู้ใช้ที่ผ่านการยืนยันตัวตนแล้ว

การควบคุมการเข้าถึง
คุณสามารถตรวจสอบได้ว่าเฉพาะผู้ใช้ที่เข้าสู่ระบบ หรือผู้ใช้ที่มี role หรือ capability บางอย่าง หรือผู้เยี่ยมชมจากช่วง IP บางช่วงเท่านั้น ที่สามารถเข้าถึงข้อมูลได้ แบบรายฟิลด์ (PRO)

การควบคุม Cache
เมื่อ cache response ของ GraphQL โดยใช้ HTTP caching มาตรฐาน header max-age จะถูกคำนวณอัตโนมัติจากทุก field ที่มีใน GraphQL query (PRO)

การปรับแต่งและจัดการ Endpoint
คุณสามารถให้บริการ custom endpoints หลายรายการ แต่ละรายการปรับแต่งสำหรับลูกค้าหรือแอปพลิเคชันเฉพาะ โดยป้องกันด้วยรหัสผ่าน
และคุณสามารถ เพิ่มหมวดหมู่แบบกำหนดเอง ให้กับพวกมัน และ กำหนดลำดับชั้น (เช่น /graphql/customers/some-customer และ /graphql/customers/another-customer)

การอัปเดตแบบกลุ่ม
คุณสามารถดำเนินการอัปเดตแบบกลุ่มได้ ตัวอย่างเช่น คุณสามารถลบความคิดเห็นทั้งหมดบนเว็บไซต์ หรือกำหนดแท็กหรือหมวดหมู่ให้กับโพสต์ทั้งหมดของคุณ
และคุณสามารถค้นหาและแทนที่ string ในโพสต์หลายร้อยรายการได้ ตัวอย่างเช่น แทนที่โดเมนเก่าด้วยโดเมนใหม่ และแม้แต่ ใช้ regex (PRO)
ฟีเจอร์ GraphQL แบบกำหนดเอง
คุณจะสามารถเข้าถึงฟีเจอร์ GraphQL ใหม่ที่เสนอสำหรับ spec แต่ยังไม่ได้เผยแพร่ รวมถึง nested mutations, schema namespacing และ 'oneOf' Input Object

Multiple Query Execution
WPGraphQL อนุญาตให้ ประมวลผล queries แบบ batch ซึ่ง GraphQL queries หลายรายการจะถูกประมวลผลภายใน HTTP request เดียว
Gato GraphQL มี Multiple Query Execution ซึ่งเอกสาร GraphQL เดียวสามารถ execute หลาย operations ได้
Multiple Query Execution เป็นการพัฒนาจาก query batching เนื่องจาก operations สามารถแบ่งปันสถานะซึ่งกันและกันผ่าน directive @export
ตัวอย่างเช่น เพื่อ ทำสำเนาโพสต์ เรามี operation query ดึงข้อมูลโพสต์ และส่งข้อมูลนี้ไปยัง operation mutation ที่สร้างโพสต์ใหม่:
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
}
}Composability
คุณจะมีความสามารถในการ รวม fields เข้าด้วยกัน ซึ่งค่าของ field หนึ่งสามารถใช้เป็น input ของอีก field หนึ่งใน query เดียวกัน ทำให้ชุด field resolvers พื้นฐานครอบคลุมกรณีการใช้งานได้ไม่จำกัด (PRO)
ตัวอย่างเช่น แทนที่จะสร้าง field Post.hasExcerpt เราสามารถใช้ field _notEmpty กับ Post.excerpt เพื่อสร้างค่าเดียวกันได้:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}ในทำนองเดียวกัน คุณสามารถ รวม directives เข้าด้วยกัน ทำให้ directive สามารถถูกใช้กับ property ภายในจากค่าของ field ได้
ตัวอย่างเช่น query ต่อไปนี้แปลชื่อหมวดหมู่ของโพสต์เป็นภาษาอื่น:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}ความพร้อมใช้งานของ GraphQL Server
คุณสามารถเปิดเผย private endpoints เพื่อขับเคลื่อน Gutenberg blocks ของคุณ และคุณสามารถ เข้าถึง private GraphQL server เพื่อดึงข้อมูลสำหรับแอปพลิเคชันของคุณโดยใช้โค้ด PHP โดยไม่เปิดเผย endpoint ที่เผยแพร่สาธารณะใดๆ (PRO)
ความหลากหลายในการ Mutate ข้อมูล
คุณสามารถใช้ GraphQL เพื่อดึงข้อมูล แก้ไข และบันทึกเนื้อหาในเว็บไซต์ของคุณใหม่อีกครั้ง ทั้งหมดภายใน GraphQL document เดียว (PRO)
ตัวอย่างเช่น คุณสามารถดึง Gutenberg blocks ทั้งหมดในโพสต์ ดึง properties ของพวกมัน แปล strings เหล่านั้นผ่าน Google Translate API แทรก strings เหล่านั้นกลับเข้าไปใน block และบันทึกโพสต์อีกครั้ง
การซิงค์และแจกจ่ายเนื้อหา
คุณสามารถใช้ GraphQL เพื่อ นำเข้าโพสต์จากเว็บไซต์ WordPress อื่น, จาก RSS feed, จาก CSV หรือจาก REST หรือ GraphQL API ใดก็ได้ (PRO)
คุณสามารถ ส่งออกเนื้อหาไปยังเว็บไซต์ WordPress อื่น และบันทึกเป็น JSON และ CSV (PRO)
การโต้ตอบกับ Web Service
คุณสามารถเรียก API ของบริการภายนอกใดก็ได้ผ่าน HTTP client (PRO) ตัวอย่างเช่น คุณสามารถ สมัครสมาชิก WordPress users ของคุณเข้าสู่ Mailchimp email list
และคุณสามารถ รับและประมวลผลข้อมูลขาเข้าจากบริการใดก็ได้ ผ่าน webhook เฉพาะ (PRO) ตัวอย่างเช่น คุณสามารถ รวบรวม newsletter emails ที่ลงทะเบียนใน InstaWP sandbox site และส่งไปยัง Mailchimp โดยอัตโนมัติ
Automation
คุณสามารถใช้ GraphQL เพื่อ automate งานและ content workflows (PRO)
ตัวอย่างเช่น เมื่อมีการสร้างโพสต์ใหม่ (event ผ่าน hook draft_post) คุณสามารถ execute persisted query ที่ตรวจสอบว่าโพสต์ไม่มี thumbnail หรือไม่ และในกรณีนั้น สร้างรูปภาพโดยเรียก Stable Diffusion API บีบอัดผ่าน TinyPng และสุดท้ายแทรกรูปภาพเป็น featured image ของโพสต์

ความง่ายในการใช้งาน
กรณีการใช้งานเพิ่มเติมทั้งหมดเหล่านี้สามารถทำได้โดยตรงภายใน wp-admin โดยป้อน GraphQL query ผ่าน user interface โดยไม่ต้องนำโค้ด PHP ไป deploy
