GraphQL คืออะไร
ก่อนอื่นต้องบอกก่อน วิธีการสื่อสารระหว่าง client & server นั้นเราใช้วิธีการที่เรียกว่า REST API มานานกันพอสมควรแล้ว แต่มันก็ยังมีปัญหาอยู่หลายๆ ประการเช่น การมี endpoint ที่เยอะ และ การเลือกข้อมูลลำบาก หรือพูดง่ายๆ จะขอบางอย่างไม่ได้ แต่ต้องขอทุกอย่างตาม spec ที่ API docs นั้นให้มา
GraphQL เป็นภาษาสำหรับ query และทำงานร่วมกับ API ที่ถูกพัฒนาโดย Facebook (ปี 2012) และเปิดเป็นโอเพนซอร์สในปี 2015 เป้าหมายของมันคือ ช่วยแก้ปัญหาดังกล่าวข้างต้นที่ขอไป ให้ client สามารถ
แนวคิดหลัก
/graphql
) แทนการมีหลาย endpoint แบบ RESTตัวอย่าง
query {
user(id: 1) {
name
email
}
}
Server จะตอบกลับเฉพาะฟิลด์ name
และ email
ของ user ที่ id = 1 เท่านั้น เพราะฉะนั้นก็เลยช่วยลด traffic ที่วิ่งระหว่าง client & server ด้วย ซึ่งถือว่าเป็นข้อดีอย่างมากเลยทีเดียว
เปรียบเทียบ GraphQL กับ REST API
คุณสมบัติ | GraphQL | REST API |
---|---|---|
โครงสร้างข้อมูล | Client กำหนดเองว่าจะเอา field อะไรบ้าง | Server กำหนดว่าจะส่งข้อมูลอะไร (fixed structure) |
จำนวน endpoint | ใช้ endpoint เดียว (เช่น /graphql ) |
หลาย endpoint เช่น /users , /users/:id/posts |
Over-fetching (ได้ข้อมูลเยอะเกิน) | ลดได้มาก เพราะขอเฉพาะ field ที่ต้องการ | เกิดบ่อย เพราะ endpoint ส่งข้อมูลทั้งหมดตามที่กำหนด ทุกอย่างถูกตั้งค่าด้วย API docs ไว้แล้ว |
Under-fetching (ได้ข้อมูลไม่พอ) | ลดได้มาก เพราะสามารถรวม query ข้อมูลหลายส่วนใน request เดียว | เกิดบ่อย ต้องยิงหลาย request เพื่อให้ได้ข้อมูลครบ รวมถึงหลาย endpoint |
การจัดการเวอร์ชัน (versioning) | มักไม่ต้องใช้ version (เพราะสามารถเพิ่ม field ใหม่ได้โดยไม่กระทบ client เดิม) | มักใช้ version เช่น /api/v1/ เพื่อป้องกันความสับสน |
ประสิทธิภาพ | ดีกว่าถ้าข้อมูลต้องรวมจากหลาย resource | เรียบง่าย |
การแคช | ทำได้ซับซ้อนกว่า REST (เพราะใช้ endpoint เดียว) ต้องใช้ library ช่วย | ง่ายเพราะ URL endpoint คงที่ สามารถใช้ HTTP cache ได้ตรง ๆ |
การเรียนรู้ | มี learning curve สูงขึ้น ต้องเข้าใจ schema, resolvers, types อย่างดี | เข้าใจง่ายกว่า เหมาะกับผู้เริ่มต้น เพราะหลายคนคุ้นเคยอยู่แล้ว |
การดีบัก | มี GraphiQL/Playground ช่วย query และทดสอบ | ใช้เครื่องมือทั่วไปเช่น Postman หรือ curl |
สรุป
แต่ยังไงก็เป็นสิ่งหนึ่งที่น่าจะเรียนรู้ เพราะมันคือนวัตกรรมใหม่ ที่กำลังมาแรง และ เริ่มมีการใช้งานมากขึ้นในปัจจุบัน และ มันก็ยังมีข้อดีอีกหลายๆ ประการซึ่งในครั้งหน้าเราจะพาไปเรียนรู้เพิ่มเติม