ทำความรู้จักกับ GraphQL

GraphQL คือ ภาษาสำหรับการเข้าถึงข้อมูล (Query Language) เพื่อการใช้งาน API ของระบบและจะประมวลผลคำสั่งที่ฝั่ง server หรือที่เรียกว่า server-side runtime โดยใช้โครงสร้างข้อมูลที่เรากำหนดไว้
GraphQL is a query language for your API, and a server-side runtime for executing queries by using a type system you define for your data.
แต่ GraphQL ไม่ได้พัฒนาขึ้นมาเพื่อแทนที่ภาษาสำหรับการเข้าถึงข้อมูลเช่น SQL หรือทำหน้าที่เป็นระบบจัดเก็บฐานข้อมูล (storage engine) แต่อย่างใด
ในปัจจุบันวิธีที่เข้าถึงข้อมูลผ่านเว็บเซอร์วิสที่ได้รับความนิยมก็จะเป็น REST API ผ่านทาง HTTP Mehtods ตัวอย่างเช่น ต้องการดึงข้อมูลผู้ใช้งานทั้งหมด ก็สามารถเรียกผ่าน API ได้ดังนี้
GET /usersหรือหากต้องการดึงเพื่อนทั้งหมดของผู้ใช้งาน ID 25
GET /users/25/friends แต่หากผมต้องการดึงเบอร์โทรศัพท์ของเพื่อนที่เป็นเพื่อนกับผู้ใช้งาน ID 25 ล่ะจะต้องดึงและเขียนโปรแกรมอย่างไร? โดยผมมีการจัดเก็บข้อมูลดังนี้

จากตัวอย่างนี้จะเห็นได้ว่าเราจำเป็นต้องมี API 2 end point ด้วยกัน คือ GET /users/:id/friends เพื่อดึงข้อมูลเพื่อนของผู้ใช้ ID 25 จากนั้นก็วนลูปดึงข้อมูลผู้ใช้โดยใช้ GET /users/:id เพื่อดึงข้อมูลเบอร์โทรศัพท์อีกที และวิธีนี้ผมก็จะได้ข้อมูลอื่นๆที่ไม่จำเป็นของผู้ใช้มาอีกด้วย ไม่ว่าจะเป็นชื่อ รูปภาพ และอีเมล์
อีกวิธีหนึ่งผมก็พัฒนา API end point ขึ้นมาใหม่ชื่อว่า GET /users/:id/friends_mobile เพื่อใช้งานสำหรับกรณีนี้โดยเฉพาะ
ในความเป็นจริงแล้ว องค์กรใหญ่ๆ ที่มีหลากหลายแผนก ต่างก็ร้องขอข้อมูลที่ไม่เหมือนกัน เช่น บางแผนกต้องการเฉพาะข้อมูลพนักงาน บางแผนกต้องการข้อมูลพนักงานพร้อมข้อมูลเงินเดือน หรือบางแผนกต้องการข้อมูลพนักงานกับจำนวนวันที่ขาดหรือลาเท่านั้น เป็นต้น การใช้งาน REST API จึงสร้างความลำบากต่อการพัฒนาและดูแลรักษาเซอร์วิส
ด้วยเหตุนี้ GraphQL จึงได้เข้ามาเพื่อแก้ปัญหาในจุดนี้โดยเฉพาะ เพื่อให้เราสามารถดึงข้อมูลได้ตรงกับความต้องการ ลดความซับซ้อนในการเขียนโค้ดเพื่อดึงข้อมูล สามารถจัดการและดูแลรักษาโค้ดในฝั่ง server-side ได้ง่ายมากยิ่งขึ้น และที่สำคัญ GraphQL ไม่ได้ผูกติดกับ database และ ที่จัดเก็บข้อมูลใดๆทั้งนั้น
