GraphQL servers สำหรับ WordPress

Gato GraphQL vs WPGraphQL

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

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs WPGraphQL

หากคุณต้องการเพียงแค่สร้างเว็บไซต์ WordPress แบบ headless และ deploy เป็น static และปัจจุบันใช้ WPGraphQL อยู่ การเปลี่ยนมาใช้ Gato GraphQL จะไม่ทำให้เกิดความแตกต่างใดๆ

ในกรณีอื่นๆ การเปลี่ยนมาใช้ Gato GraphQL จะให้ประโยชน์มากมาย ต่อไปนี้คือฟีเจอร์ที่ Gato GraphQL + ส่วนขยายทั้งหมดมอบให้ ซึ่ง WPGraphQL ไม่มี

ตารางสรุปเปรียบเทียบ

ฟีเจอร์Gato GraphQLWPGraphQL
ปัญหา 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 ในเอกสารเดียว แบ่งปันสถานะด้วย @exportBatch queries (หลายรายการต่อ request) แต่ไม่สามารถแบ่งปันสถานะได้
Internal/Private EndpointsPrivate 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 queriesUI สำหรับผู้ดูแลระบบพื้นฐานกว่า
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 ได้อย่างสมบูรณ์ ทำให้ไม่สามารถเข้าถึงได้แม้แต่ผู้ใช้ที่ผ่านการยืนยันตัวตนแล้ว

Persisted query editor
Persisted query editor

การควบคุมการเข้าถึง

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

Access Control List editor
Access Control List editor

การควบคุม Cache

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

Cache Control List editor

การปรับแต่งและจัดการ Endpoint

คุณสามารถให้บริการ custom endpoints หลายรายการ แต่ละรายการปรับแต่งสำหรับลูกค้าหรือแอปพลิเคชันเฉพาะ โดยป้องกันด้วยรหัสผ่าน

และคุณสามารถ เพิ่มหมวดหมู่แบบกำหนดเอง ให้กับพวกมัน และ กำหนดลำดับชั้น (เช่น /graphql/customers/some-customer และ /graphql/customers/another-customer)

Password-protected Custom Endpoint
Password-protected Custom Endpoint

การอัปเดตแบบกลุ่ม

คุณสามารถดำเนินการอัปเดตแบบกลุ่มได้ ตัวอย่างเช่น คุณสามารถลบความคิดเห็นทั้งหมดบนเว็บไซต์ หรือกำหนดแท็กหรือหมวดหมู่ให้กับโพสต์ทั้งหมดของคุณ

และคุณสามารถค้นหาและแทนที่ string ในโพสต์หลายร้อยรายการได้ ตัวอย่างเช่น แทนที่โดเมนเก่าด้วยโดเมนใหม่ และแม้แต่ ใช้ regex (PRO)

ฟีเจอร์ GraphQL แบบกำหนดเอง

คุณจะสามารถเข้าถึงฟีเจอร์ GraphQL ใหม่ที่เสนอสำหรับ spec แต่ยังไม่ได้เผยแพร่ รวมถึง nested mutations, schema namespacing และ 'oneOf' Input Object

Namespaced interactive schema
Namespaced interactive schema

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 ของโพสต์

Automation Rule editor
Automation Rule editor

ความง่ายในการใช้งาน

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

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

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