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


ความแตกต่างระหว่าง REST API และ GraphQL API โดยทั่วไปยังคงใช้ได้เมื่อนำ WP REST API มาเปรียบเทียบกับ Gato GraphQL
ด้วย GraphQL คุณสามารถรัน GraphQL query ที่ปรับแต่งเองกับ endpoint ได้ โดยระบุข้อมูลเฉพาะที่ต้องการและดึงข้อมูลนั้นเพียงครั้งเดียวในคำขอเดียว
ตัวอย่างเช่น GraphQL query ต่อไปนี้จะดึงข้อมูลที่จำเป็นสำหรับโพสต์หนึ่งๆ รวมถึงข้อมูลจากความสัมพันธ์ต่างๆ (ผู้เขียน หมวดหมู่ และแท็ก) ทั้งหมดในคำขอเดียว:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}ในการดึงข้อมูลเดียวกันด้วย REST คุณอาจต้องรันคำขอแรกเพื่อดึงข้อมูลโพสต์ก่อน แล้วตามด้วยคำขอเพิ่มเติมสำหรับแต่ละความสัมพันธ์ (ผู้เขียน หมวดหมู่ และแท็ก) เพื่อดึงข้อมูลเหล่านั้น
ความแตกต่างทางสถาปัตยกรรมระหว่าง REST และ GraphQL เหล่านี้ได้รับการกล่าวถึงอย่างกว้างขวางในที่อื่นๆ แล้ว ดังนั้นเราจะไม่พูดซ้ำที่นี่
ด้านล่าง มาทำการเปรียบเทียบที่เฉพาะเจาะจงมากขึ้นระหว่าง Gato GraphQL พร้อมส่วนขยายทั้งหมด และWP REST API
ตารางสรุป
| ฟีเจอร์ | Gato GraphQL | WP REST API |
|---|---|---|
| การดึงข้อมูล | รัน GraphQL queries ที่ปรับแต่งเองกับ endpoint ดึงข้อมูลเฉพาะในคำขอเดียว | ต้องส่งคำขอหลายครั้งไปยัง endpoint ต่างๆ เพื่อดึงข้อมูลที่เกี่ยวข้อง (เช่น ข้อมูลโพสต์ ข้อมูลผู้เขียน หมวดหมู่ และแท็ก) |
| Endpoints | รองรับ Persisted Queries ซึ่งเป็น endpoints ที่มีข้อมูลกำหนดไว้ล่วงหน้า สร้างโดยใช้ภาษา GraphQL ผ่าน user interface ภายใน wp-admin โดยไม่ต้องดีพลอยโค้ด | เปิดเผยข้อมูลผ่าน REST endpoints แต่ละ endpoint มี URL และข้อมูลที่กำหนดไว้ล่วงหน้า สร้างผ่านโค้ด PHP และดีพลอยภายใน theme หรือ plugin |
| การควบคุมการเข้าถึง | มอบความยืดหยุ่นด้วยการควบคุมการเข้าถึงระดับ field ตามกฎต่างๆ (เช่น user roles, capabilities, IP range) | จำกัดข้อมูลตามพารามิเตอร์ context (เช่น view สำหรับผู้ใช้ที่ไม่ได้รับการยืนยันตัวตน edit สำหรับผู้ใช้ที่ยืนยันตัวตนแล้วและมีสิทธิ์) |
| การดำเนินการแบบกลุ่ม | รองรับ Multiple Query Execution ที่ GraphQL document เดียวสามารถรัน operations หลายรายการที่แบ่งปัน state กันได้ผ่าน directive @export ซึ่งเป็นการปรับปรุงจาก batch requests | อนุญาต batch requests ที่คำขอหลายรายการได้รับการจัดการภายในคำขอ HTTP เดียว |
| การจัดการเว็บไซต์ | สามารถดึงข้อมูล แก้ไข และบันทึกกลับภายใน GraphQL document เดียว ผ่าน user interfaces ช่วยให้สามารถทำงานอัตโนมัติและจัดการ WordPress sites ได้ สามารถทำงานของ plugins หลายตัวเช่น การทำสำเนา การทำงานอัตโนมัติ การสำรองข้อมูล การค้นหา/แทนที่ webhooks และการแปล เป็นทั้ง API และมากกว่านั้น | เป็นหลัก API สำหรับการเข้าถึงและจัดการข้อมูล WordPress |
| ความยืดหยุ่น | เป็นเครื่องมือทั่วไปสำหรับจัดการ WordPress sites สามารถ mutate ข้อมูลและผสานรวมกับบริการของบุคคลที่สามผ่าน GraphQL queries | มุ่งเน้นการให้บริการ API ต้องใช้ plugins เพิ่มเติมหรือโค้ดที่กำหนดเองเพื่อให้ได้ฟังก์ชันที่คล้ายกัน |
สรุปประเด็นสำคัญ:
- การดึงข้อมูล: Gato GraphQL ใช้ queries ที่ปรับแต่งเอง ขณะที่ WP REST API ใช้คำขอหลาย endpoint
- Endpoints: Gato GraphQL ใช้ persisted queries ที่สร้างผ่าน UI ขณะที่ WP REST API ใช้ REST endpoints ที่เขียนด้วย PHP
- การควบคุมการเข้าถึง: Gato GraphQL มอบการควบคุมระดับ field ขณะที่ WP REST API ใช้พารามิเตอร์ context
- การดำเนินการแบบกลุ่ม: Gato GraphQL ใช้ Multiple Query Execution และ WP REST API ใช้ batch requests
- การจัดการเว็บไซต์: Gato GraphQL เป็นเครื่องมือที่ครอบคลุม และ WP REST API เป็นหลัก API
การเข้าถึงข้อมูลที่กำหนดไว้ล่วงหน้า
ด้วย WP REST API คุณเปิดเผยข้อมูลผ่าน REST endpoints แต่ละ endpoint มี URL ของตัวเองและข้อมูลถูกกำหนดไว้ล่วงหน้า (สำหรับทรัพยากรที่สอดคล้องกัน เช่น โพสต์หรือผู้ใช้)
คล้ายกับ REST endpoints Gato GraphQL รองรับ Persisted Queries ซึ่งเป็น endpoints ที่มีข้อมูลกำหนดไว้ล่วงหน้าเช่นกัน การขอ persisted query ผ่าน GET จะรัน GraphQL query ที่บันทึกไว้และสร้างการตอบสนอง JSON ตามที่คาดหวัง:

ความแตกต่างระหว่างทั้งสองคือ REST API endpoints ถูกสร้างผ่านโค้ด PHP และต้องดีพลอยภายใน theme หรือ plugin ในขณะที่ Gato GraphQL persisted queries ถูกสร้างโดยใช้ GraphQL language และเผยแพร่ผ่าน user interface (ขับเคลื่อนโดย WordPress editor) ภายใน wp-admin โดยไม่ต้องดีพลอยโค้ดใดๆ

กลไก caching เดียวกันสามารถนำไปใช้กับ REST endpoints และ GraphQL persisted queries ได้ เนื่องจาก persisted query ถูกเข้าถึงภายใต้ endpoint ของตัวเอง การตอบสนองของมันจึงสามารถ cache ได้โดยใช้ HTTP caching มาตรฐาน (PRO)
การควบคุมการเข้าถึง
การจำกัดข้อมูลใน WP REST API ขึ้นอยู่กับพารามิเตอร์ context การส่ง ?context=view จะสร้างข้อมูลสำหรับผู้ใช้ที่ไม่ได้รับการยืนยันตัวตน และ ?context=edit จะรวมข้อมูลเพิ่มเติมสำหรับผู้ใช้ที่ยืนยันตัวตนแล้ว (ที่มีสิทธิ์ที่ถูกต้อง) เช่น field content.raw ของโพสต์
Gato GraphQL มอบความยืดหยุ่นที่มากกว่า โดยทุก field สามารถเข้าถึงได้หรือไม่ได้ตามกฎ Access Control คุณสามารถตรวจสอบได้ว่าเฉพาะผู้ใช้ที่เข้าสู่ระบบ หรือผู้ใช้ที่มี role หรือ capability บางอย่าง หรือผู้เยี่ยมชมจาก IP range บางช่วงเท่านั้นที่สามารถเข้าถึง field เฉพาะได้ (PRO)

การดำเนินการแบบกลุ่ม
WP REST API อนุญาตให้รัน batch requests ที่คำขอหลายรายการได้รับการจัดการภายในภายในคำขอ HTTP เดียว
Gato GraphQL มอบ Multiple Query Execution ที่ GraphQL document เดียวสามารถรัน operations หลายรายการได้
Multiple Query Execution เป็นการปรับปรุงจาก batch requests เนื่องจาก operations สามารถแบ่งปัน state กันได้ผ่าน 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
}
}การจัดการ WordPress site
Gato GraphQL ช่วยให้เราสามารถดึงข้อมูลจากฐานข้อมูล แก้ไขตามที่ต้องการ และบันทึกกลับ ทั้งหมดภายใน GraphQL document เดียว
สิ่งนี้ทำได้ผ่าน user interfaces เพื่อสร้างและเผยแพร่ GraphQL queries กำหนดค่า endpoints ตามที่ต้องการ และทำให้การรัน query เป็นอัตโนมัติเมื่อเกิด event บางอย่างขึ้น
ทั้งหมดนี้หมายความว่า Gato GraphQL เป็นเครื่องมือทั่วไปสำหรับจัดการ WordPress sites ของเรา ตอบสนอง use cases ที่ข้อมูล (ไม่ว่าจะมาจาก WordPress site หรือมาจากบริการของบุคคลที่สาม) ต้องถูก mutate ซึ่งสามารถทำได้โดยการรัน GraphQL query
โปรดสังเกตว่า Gato GraphQL สามารถมอบฟังก์ชันของ plugins หลายตัวได้:
- มันไม่ใช่ plugin ทำสำเนา แต่คุณสามารถทำสำเนาโพสต์ได้
- มันไม่ใช่ plugin ทำงานอัตโนมัติ แต่คุณสามารถทำให้งานของคุณเป็นอัตโนมัติได้โดยไม่มีข้อจำกัด
- มันไม่ใช่ plugin สำรองข้อมูล แต่คุณสามารถนำเข้าและส่งออกโพสต์ได้
- มันไม่ใช่ plugin ค้นหาและแทนที่ แต่คุณสามารถแก้ไขโพสต์ของคุณแบบกลุ่มได้
- มันไม่ใช่ webhook plugin หรือ HTTP client แต่คุณสามารถทั้งส่งคำขอไปยัง API ใดก็ได้ และรับและประมวลผลคำขอขาเข้าจากบริการใดก็ได้
- มันไม่ใช่ plugin แปลภาษา แต่คุณสามารถแปลเนื้อหาใดก็ได้
WP REST API เป็นเพียง API
Gato GraphQL เป็นทั้ง API และมากกว่านั้น
