- ใช้มาตั้งแต่ปี 2018 เป็นเวลา 6 ปี เคยเป็นแฟนตัวยงของ GraphQL อย่างแท้จริง แต่ตอนนี้เริ่มมีความกังขา
- ต้องการอธิบายเหตุผลที่ตอนนี้ไม่แนะนำ GraphQL แล้ว และคิดว่าทางเลือกที่ดีกว่าคืออะไร
พื้นที่ผิวการโจมตี
- GraphQL มีความเสี่ยงที่จะขยายพื้นที่ผิวการโจมตี เพราะเปิดเผยภาษาคิวรีออกมา
- ปัญหาที่เกี่ยวข้องกับการกำหนดสิทธิ์มีความสำคัญเป็นพิเศษ
- จำเป็นต้องมีการตรวจสอบสิทธิ์ที่เหมาะสมสำหรับทุกฟิลด์
- ใน REST API การตรวจสอบสิทธิ์แยกตามแต่ละเอ็นด์พอยต์ทำได้ง่ายกว่า
การกำหนดสิทธิ์
- ต้องตรวจสอบสิทธิ์ของผู้ใช้สำหรับทุกฟิลด์
- ใน REST API การตรวจสอบสิทธิ์แยกตามแต่ละเอ็นด์พอยต์ทำได้ง่ายกว่า
การจำกัดอัตรา
- คิวรีของ GraphQL ไม่มีการจำกัดขนาด จึงอาจสร้างภาระหนักให้เซิร์ฟเวอร์ได้
- มีวิธีประเมินความซับซ้อนของคิวรี และจำกัดคิวรีที่เกินระดับความซับซ้อนที่กำหนด
- ใน REST API การจำกัดจำนวนคำขอทำได้ง่ายกว่า
การพาร์สคิวรี
- สตริงคิวรีที่ไม่ถูกต้องอาจทำให้หน่วยความจำของเซิร์ฟเวอร์ถูกใช้มากเกินไป
- มีวิธีตั้งค่าจำนวนข้อผิดพลาดสูงสุดเพื่อหยุดการพาร์ส
ประสิทธิภาพ
การดึงข้อมูลและปัญหา N+1
- ตัวแก้ไขฟิลด์อาจเรียกแหล่งข้อมูลภายนอกหลายครั้ง
- สามารถใช้แพตเทิร์น Dataloader เพื่อแก้ปัญหานี้ได้
- ใน REST การแก้ปัญหา N+1 ที่คอนโทรลเลอร์ทำได้ง่ายกว่า
การกำหนดสิทธิ์และปัญหา N+1
- โค้ดการกำหนดสิทธิ์อาจทำให้เกิดปัญหา N+1 ได้
- ใน REST จะไม่เกิดปัญหานี้
การยึดติดกันแน่น
- โค้ดเบสของ GraphQL มีการยึดตรรกะทางธุรกิจเข้ากับเลเยอร์การขนส่งอย่างแน่นหนา
- จำเป็นต้องมีการทดสอบแบบบูรณาการ และดีบักได้ยาก
ความซับซ้อน
- วิธีการต่าง ๆ ที่ใช้แก้ปัญหาด้านความปลอดภัยและประสิทธิภาพของ GraphQL ทำให้ความซับซ้อนของโค้ดเบสเพิ่มขึ้น
- โซลูชันแบบ REST โดยทั่วไปมักเรียบง่ายกว่า
ทางเลือก
- แนะนำ JSON REST API ที่ใช้ OpenAPI 3.0+
- หากมีไคลเอนต์ที่เขียนด้วยภาษาแบบ static type, OpenAPI อาจเป็นตัวเลือกที่ดีกว่า
- OpenAPI สามารถสร้างโค้ดไคลเอนต์แบบ type-safe ได้โดยอัตโนมัติ
ความเห็นของ GN⁺
- GraphQL ทรงพลัง แต่ต้องใช้ความพยายามมากในการแก้ปัญหาด้านความปลอดภัยและประสิทธิภาพ
- REST API ค่อนข้างเรียบง่ายกว่า และในหลายกรณีอาจเหมาะสมกว่า
- OpenAPI มอบความปลอดภัยของชนิดข้อมูลและเครื่องมืออัตโนมัติที่ช่วยเพิ่มประสิทธิภาพการพัฒนา
- เมื่อนำ GraphQL มาใช้ ควรพิจารณาปัญหาด้านความปลอดภัยและประสิทธิภาพอย่างรอบคอบ
- สิ่งสำคัญคือการเปรียบเทียบข้อดีข้อเสียของ REST กับ GraphQL แล้วเลือกเทคโนโลยีที่เหมาะกับโครงการ
8 ความคิดเห็น
เหตุผลที่เลิกใช้ GraphQL หลังจากผ่านไป 6 ปี
GraphQL ค่อนข้างน่าหงุดหงิด (2022)
ยุคแห่งการระบาดใหญ่ของ rpc กำลังมาถึง
ก็อย่างที่คิดนั่นแหละ... แค่มีอะไรที่ดู fancy ออกมาก็ไม่ควรงับแล้วอวยกันทันทีหรอก.. ทีนี้ก็ถึงคิว ORM แล้วสินะ. แกเองก็อีกไม่นานหรอก...
ORM มีมานานกว่า 20 ปีแล้วนะครับ...
ถ้าเป็นปี 2018 PQ ก็คงไม่ได้ใหม่ขนาดนั้นแล้วนี่นา (จริงๆ แล้วก็มีการแนะนำมาตั้งแต่ตอนที่ GraphQL เปิดตัวครั้งแรก) เลยค่อนข้างน่าแปลกที่ไม่ได้ลองพยายามใช้มาตลอด 6 ปี...
การจะลงมือทำ GraphQL ทั้งหมดด้วยตัวเองนั้นเป็นเรื่องยากทั้งในแง่ความซับซ้อนและความเสถียร ด้วยเหตุผลทั้งหมดที่กล่าวไปข้างต้น ผมคิดว่าการวางเลเยอร์อย่าง hasura หรือ postgraphile ไว้บน DB แล้วค่อยเพิ่มสิ่งที่ต้องการเข้าไปที่เลเยอร์นี้ ไม่ว่าจะเป็น graphql หรือ rest ตามความจำเป็น น่าจะเป็นวิธีพัฒนาที่ดีกว่า
ความคิดเห็นจาก Hacker News