APIs สำหรับ WordPress

Gato GraphQL vs WP REST API

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

Gato GraphQL vs WP REST API
plus image
Gato GraphQL vs 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 GraphQLWP 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 ตามที่คาดหวัง:

การรัน persisted query ในเบราว์เซอร์
การรัน persisted query ในเบราว์เซอร์

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

ตัวแก้ไข persisted query
ตัวแก้ไข persisted query

กลไก 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)

ตัวแก้ไข Access Control List
ตัวแก้ไข Access Control List

การดำเนินการแบบกลุ่ม

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 หลายตัวได้:

WP REST API เป็นเพียง API

Gato GraphQL เป็นทั้ง API และมากกว่านั้น

สมัครรับจดหมายข่าวของเรา

ติดตามการอัปเดตทั้งหมดของ Gato GraphQL