อ่าน 4 นาที
กราฟคิวแอล
GraphQLเป็น ภาษา สำหรับการสอบถามและจัดการ ข้อมูล ที่อนุญาตให้ระบุข้อมูลที่จะดึงมา (" การดึงข้อมูล แบบประกาศ ") หรือแก้ไขได้ เซิร์ฟเวอร์ GraphQL...
กราฟคิวแอล
| กราฟคิวแอล | |
|---|---|
| ผู้เขียนต้นฉบับ | แพลตฟอร์มเมตา |
| นักพัฒนา | มูลนิธิ GraphQL |
| ปล่อย | 14 กันยายน 2558 (10 ปี 289 วัน) |
| เวอร์ชันเสถียร | |
| เขียนเป็น | สามารถนำไปใช้งานได้ในภาษา 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 ]
ระบบประเภท

ด้วย 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