กลับไปหน้าบทความ

อ่าน 4 นาที

กราฟคิวแอล

GraphQLเป็น ภาษา สำหรับการสอบถามและจัดการ ข้อมูล ที่อนุญาตให้ระบุข้อมูลที่จะดึงมา (" การดึงข้อมูล แบบประกาศ ") หรือแก้ไขได้ เซิร์ฟเวอร์ GraphQL...

กราฟคิวแอล

(Learn how and when to remove this message)

กราฟคิวแอล
ผู้เขียนต้นฉบับแพลตฟอร์มเมตา
นักพัฒนามูลนิธิ GraphQL
ปล่อย14 กันยายน 2558 (10 ปี 289 วัน) (2015-09-14)
เวอร์ชันเสถียร
กันยายน 2025 [ 1 ] (2025-09)
เขียนเป็นสามารถนำไปใช้งานได้ในภาษา Java , JavaScript , Ruby , Scalaและภาษาอื่นๆ
ใบอนุญาตใบอนุญาต MIT
เว็บไซต์graphql.org
ที่เก็บข้อมูลgithub.com/graphql/graphql-spec

GraphQLเป็น ภาษา สำหรับการสอบถามและจัดการ ข้อมูล ที่อนุญาตให้ระบุข้อมูลที่จะดึงมา (" การดึงข้อมูล แบบประกาศ ") หรือแก้ไขได้ เซิร์ฟเวอร์ GraphQL สามารถประมวลผลการสอบถามของไคลเอ็นต์โดยใช้ข้อมูลจากแหล่งข้อมูลที่แยกจากกัน และนำเสนอผลลัพธ์ในกราฟ ที่เป็นหนึ่งเดียว [ 2 ]ภาษาดังกล่าวไม่ได้ผูกติดกับฐานข้อมูลหรือเอ็นจิ้นจัดเก็บข้อมูลใดๆ โดยเฉพาะ มีเอ็นจิ้นรันไทม์โอเพนซอร์ส หลายตัว สำหรับ GraphQL

ประวัติศาสตร์

Facebookเริ่มพัฒนา GraphQL ในปี 2012 และเผยแพร่ร่างข้อกำหนดและการใช้งานอ้างอิงเป็นโอเพนซอร์สในปี 2015 [ 3 ]ในปี 2018 GraphQL ถูกย้ายไปยัง GraphQL Foundation ที่จัดตั้งขึ้นใหม่ ซึ่งดูแลโดยLinux Foundation องค์กร ไม่แสวงหาผล กำไร[ 4 ] [ 5 ]

เมื่อวันที่ 9 กุมภาพันธ์ พ.ศ. 2561 ภาษาการกำหนดโครงสร้างสคีมา GraphQL ได้กลายเป็นส่วนหนึ่งของข้อกำหนด[ 6 ]

API สาธารณะยอดนิยมหลายแห่งใช้ GraphQL เป็นวิธีการเข้าถึงเริ่มต้น ซึ่งรวมถึง API สาธารณะของ Facebook, GitHub , Yelp , Shopify , Google Directions API และอื่นๆ อีกมากมาย[ 7 ] [ 8 ]

มีการประชุม GraphQL ประจำปี[ 9 ]ซึ่งนำเสนอการพัฒนาใหม่ๆ ของโปรโตคอลและองค์กรต่างๆ ที่ใช้ GraphQL ได้สำเร็จ งานนี้จัดโดยมูลนิธิ GraphQL โดย มี ผู้จัดงานก่อนหน้านี้ ได้แก่ Prisma, HygraphและCommercetools

ออกแบบ

GraphQL รองรับการอ่าน การเขียน (การเปลี่ยนแปลง) และการสมัครรับการเปลี่ยนแปลงข้อมูล (การอัปเดตแบบเรียลไทม์ – โดยทั่วไปจะใช้WebSockets ) [ 10 ]บริการ GraphQL ถูกสร้างขึ้นโดยการกำหนดประเภทที่มีฟิลด์ จากนั้นจัดเตรียมฟังก์ชันเพื่อแก้ไขข้อมูลสำหรับแต่ละฟิลด์ ประเภทและฟิลด์ประกอบกันเป็นสิ่งที่เรียกว่าคำจำกัดความของสคีมาฟังก์ชันที่ดึงและแมปข้อมูลเรียกว่าตัวแก้ไข[ 11 ]

หลังจากตรวจสอบความถูกต้องตามสคีมา แล้วเซิร์ฟเวอร์จะดำเนินการสืบค้น GraphQL เซิร์ฟเวอร์จะส่งคืนผลลัพธ์ที่สะท้อนรูปแบบของการสืบค้นดั้งเดิม โดยทั่วไปจะเป็นJSON [ 12 ]

ระบบประเภท

โครงสร้างของswapi-graphqlที่แสดงผลเป็นกราฟโดยGraphQL Voyager

ด้วย GraphQL โดเมนธุรกิจจะถูกจำลองเป็นกราฟโดยการกำหนดสคีมา ภายในสคีมานี้ จะมีการกำหนดประเภทต่างๆ ของโหนดและความสัมพันธ์ระหว่างโหนดเหล่านั้น[ 13 ]

ระบบประเภท GraphQL อธิบายว่าข้อมูลใดบ้างที่สามารถสอบถามได้จาก API ชุดของความสามารถเหล่านั้นเรียกว่าสคีมา ของบริการ และไคลเอนต์สามารถใช้สคีมานั้นเพื่อส่งคำถามไปยัง API ซึ่งจะส่งคืนผลลัพธ์ที่คาดการณ์ได้[ 14 ]

โดยค่าเริ่ม ต้น ประเภทหลักของสคีมา GraphQL Queryจะประกอบด้วยฟิลด์ทั้งหมดที่สามารถสอบถามได้ ประเภทอื่นๆ กำหนดวัตถุและฟิลด์ที่เซิร์ฟเวอร์ GraphQL สามารถส่งคืนได้ มีประเภทพื้นฐานหลายประเภท เรียกว่า สเกลาร์ เพื่อใช้แทนสิ่งต่างๆ เช่น สตริง ตัวเลข และ ID

โดยค่าเริ่มต้น ฟิลด์จะถูกกำหนดให้เป็นค่าว่างได้และสามารถใช้เครื่องหมายอัศเจรีย์ ต่อท้ายเพื่อทำให้ฟิลด์ไม่สามารถเป็นค่าว่างได้ (จำเป็น) ฟิลด์สามารถกำหนดให้เป็นรายการได้โดยการครอบประเภทของฟิลด์ด้วย วงเล็บเหลี่ยม (ตัวอย่างเช่นauthors: [String]) [ 15 ]

ประเภทแบบสอบถาม{ ผู้ใช้ปัจจุบัน: ผู้ใช้}ประเภทผู้ใช้{ id : ID ! name : String ! }

คำถาม

คำสั่ง GraphQL จะกำหนดรูปแบบข้อมูลที่ลูกค้าต้องการอย่างแม่นยำ

สืบค้นCurrentUser { currentUser { name age } }

เมื่อข้อมูลได้รับการตรวจสอบและประมวลผลโดยเซิร์ฟเวอร์ GraphQL แล้ว ข้อมูลจะถูกส่งกลับมาในรูปแบบเดิม

{ "currentUser" : { "name" : "John Doe" , "age" : 23 } }

การกลายพันธุ์

การเปลี่ยนแปลงข้อมูล (Mutation) ใน GraphQL ช่วยให้สามารถสร้าง อัปเดต หรือลบข้อมูลได้ โดยทั่วไปแล้ว การเปลี่ยนแปลงข้อมูลจะประกอบด้วยตัวแปรซึ่งช่วยให้สามารถส่งข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์ได้ นอกจากนี้ การเปลี่ยนแปลงข้อมูลยังกำหนดรูปแบบของข้อมูลที่จะส่งกลับไปยังไคลเอนต์หลังจากดำเนินการเสร็จสิ้นแล้ว

mutation CreateUser ( $name : String !, $age : Int !) { createUser ( userName : $name , age : $age ) { name age } }

ตัวแปรจะถูกส่งผ่านในรูปแบบอ็อบเจ็กต์ โดยมีฟิลด์ที่ตรงกับชื่อตัวแปรในคำสั่งเปลี่ยนแปลงข้อมูล (mutation)

{ "ชื่อ" : "ฮัน โซโล" , "อายุ" : 42 }

เมื่อการดำเนินการเสร็จสมบูรณ์ เซิร์ฟเวอร์ GraphQL จะส่งคืนข้อมูลที่ตรงกับรูปแบบที่กำหนดโดยการเปลี่ยนแปลงข้อมูล

{ "data" : { "createUser" : { "name" : "Han Solo" , "age" : 42 } } }

การสมัครสมาชิก

GraphQL ยังรองรับการอัปเดตแบบเรียลไทม์ที่ส่งจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์ในรูปแบบการดำเนินการที่เรียกว่าการสมัครรับข้อมูล (subscription) โดยไคลเอ็นต์จะเป็นผู้กำหนดรูปแบบของข้อมูลที่ต้องการทุกครั้งที่มีการอัปเดต

การสมัครสมาชิก{ บุคคลใหม่{ ชื่ออายุ} }

เมื่อมีการเปลี่ยนแปลงข้อมูลผ่านเซิร์ฟเวอร์ GraphQL ที่อัปเดตฟิลด์ที่เกี่ยวข้อง ข้อมูลจะถูกส่งไปยังไคลเอ็นต์ที่สมัครรับข้อมูลทั้งหมดในรูปแบบที่ตั้งค่าไว้ผ่านการสมัครรับข้อมูล

{ "newPerson" : { "name" : "Jane" , "age" : 23 } }

การกำหนดเวอร์ชัน

แม้ว่าจะไม่มีอะไรที่ป้องกันไม่ให้บริการ GraphQL มีการกำหนดเวอร์ชันเหมือนกับ API อื่นๆ แต่ GraphQL ก็มีความคิดเห็นที่ชัดเจนในการหลีกเลี่ยงการกำหนดเวอร์ชันโดยการจัดหาเครื่องมือสำหรับการพัฒนาอย่างต่อเนื่องของสคีมา GraphQL [ 16 ]

คำ@deprecatedสั่งในตัวถูกใช้ภายในภาษาการกำหนดระบบประเภทเพื่อระบุส่วนที่เลิกใช้แล้วของสคีมาบริการ GraphQL เช่น ฟิลด์ที่เลิกใช้แล้วในประเภทหรือค่า enum ที่เลิกใช้แล้ว[ 15 ]

GraphQL จะส่งคืนเฉพาะข้อมูลที่ได้รับการร้องขออย่างชัดเจนเท่านั้น ดังนั้นจึงสามารถเพิ่มความสามารถใหม่ได้ผ่านประเภทใหม่หรือฟิลด์ใหม่ในประเภทที่มีอยู่โดยไม่ต้องสร้างการเปลี่ยนแปลงที่ทำให้เกิดการหยุดชะงัก ซึ่งนำไปสู่แนวปฏิบัติทั่วไปในการหลีกเลี่ยงการเปลี่ยนแปลงที่ทำให้เกิดการหยุดชะงักและให้บริการ API ที่ไม่มีเวอร์ชัน[ 16 ]

เมื่อเปรียบเทียบกับภาษาการสอบถามอื่นๆ

GraphQL ไม่ได้มี ภาษาสำหรับการสืบค้น กราฟ แบบเต็มรูปแบบ เหมือนกับSPARQLหรือแม้แต่ในภาษา SQLที่รองรับการปิดแบบถ่ายทอดได้ (transitive closure ) ตัวอย่างเช่น อินเทอร์เฟซ GraphQL ที่รายงานผู้ปกครองของแต่ละบุคคล ไม่สามารถส่งคืนชุดของบรรพบุรุษทั้งหมดได้ในคำสั่งสืบค้นเดียว

การทดสอบ

สามารถทดสอบ API GraphQL ได้ด้วยตนเองหรือด้วยเครื่องมืออัตโนมัติที่ส่งคำขอ GraphQL และตรวจสอบความถูกต้องของผลลัพธ์ การสร้างการทดสอบอัตโนมัติก็เป็นไปได้เช่นกัน[ 17 ]สามารถสร้างคำขอใหม่ได้โดยใช้เทคนิคการค้นหาเนื่องจากมีสคีมาแบบมีประเภทและความสามารถในการตรวจสอบภายใน[ 18 ]

เครื่องมือซอฟต์แวร์บางส่วนที่ใช้ในการทดสอบการใช้งาน GraphQL ได้แก่Postman , Beeceptor, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor และ Step CI [ 19 ]

ดูเพิ่มเติม

  • เว็บไซต์อย่างเป็นทางการ
  • GraphQL: สารคดีบน YouTube
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=GraphQL&oldid=1357430493 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ กราฟคิวแอล

GraphQLเป็น ภาษา สำหรับการสอบถามและจัดการ ข้อมูล ที่อนุญาตให้ระบุข้อมูลที่จะดึงมา (" การดึงข้อมูล แบบประกาศ ") หรือแก้ไขได้ เซิร์ฟเวอร์ GraphQL...

ประวัติศาสตร์

Facebook เริ่มพัฒนา GraphQL ในปี 2012 และเผยแพร่ร่างข้อกำหนดและการใช้งานอ้างอิงเป็นโอเพนซอร์สในปี 2015 [ 3 ] ในปี 2018 GraphQL ถูกย้ายไปยัง GraphQL Foundation ที่จัดตั้งขึ้นใหม่ ซึ่งดูแลโดย Linux Foundation องค์กร ไม่แสวงหาผล กำไร [ 4 ] [ 5 ]

ออกแบบ

GraphQL รองรับการอ่าน การเขียน (การเปลี่ยนแปลง) และการสมัครรับการเปลี่ยนแปลงข้อมูล (การอัปเดตแบบเรียลไทม์ – โดยทั่วไปจะใช้ WebSockets ) [ 10 ] บริการ GraphQL ถูกสร้างขึ้นโดยการกำหนดประเภทที่มีฟิลด์ จากนั้นจัดเตรียมฟังก์ชันเพื่อแก้ไขข้อมูลสำหรับแต่ละฟิลด์...

ระบบประเภท

ด้วย GraphQL โดเมนธุรกิจจะถูกจำลองเป็น กราฟ โดยการกำหนดสคีมา ภายในสคีมานี้ จะมีการกำหนดประเภทต่างๆ ของโหนดและความสัมพันธ์ระหว่างโหนดเหล่านั้น [ 13 ]