บทความทั้งหมดเกี่ยวกับ GraphQL จะบอกคุณว่ามันยอดเยี่ยมแค่ไหน แต่มีข้อเสียหรือข้อบกพร่องหรือไม่? ขอบคุณ.
บทความทั้งหมดเกี่ยวกับ GraphQL จะบอกคุณว่ามันยอดเยี่ยมแค่ไหน แต่มีข้อเสียหรือข้อบกพร่องหรือไม่? ขอบคุณ.
คำตอบ:
ข้อเสีย:
แต่สิ่งเหล่านี้มีมากกว่าสิ่งเหล่านี้:
graphql-spring-boot-starter
และgraphql-java-tools
เริ่มต้นได้ สร้างสคีมาของคุณในทรัพยากร. กราฟ qls และสร้างคลาส Resolver เท่านี้ก็เสร็จเรียบร้อย ในการรับตัวอย่างการทดสอบการทำงานใช้เวลาประมาณ 10 นาที
ฉันพบข้อกังวลที่สำคัญบางอย่างสำหรับทุกคนที่คิดจะใช้ GraphQLและจนถึงตอนนี้ประเด็นหลักคือ:
Query In Indefinite Depth : GraphQL ไม่สามารถค้นหาในระดับความลึกที่ไม่แน่นอนได้ดังนั้นหากคุณมีต้นไม้และต้องการส่งคืนสาขาโดยไม่ทราบความลึกคุณจะต้องทำการแบ่งหน้า
โครงสร้างการตอบสนองเฉพาะ : ใน GraphQL การตอบสนองตรงกับรูปร่างของแบบสอบถามดังนั้นหากคุณต้องการตอบสนองในโครงสร้างที่เฉพาะเจาะจงมากคุณจะต้องเพิ่มเลเยอร์การเปลี่ยนแปลงเพื่อปรับรูปร่างการตอบสนอง
แคชที่ระดับเครือข่าย : เนื่องจากวิธีทั่วไปใช้ GraphQL ผ่าน HTTP (A POST ในจุดสิ้นสุดเดียว) แคชที่ระดับเครือข่ายจึงยาก วิธีแก้ปัญหาคือการใช้ Persisted Queries
การจัดการการอัปโหลดไฟล์ : ไม่มีอะไรเกี่ยวกับการอัปโหลดไฟล์ในข้อกำหนด GraphQL และการกลายพันธุ์ไม่ยอมรับไฟล์ในอาร์กิวเมนต์ ในการแก้ปัญหานี้คุณสามารถอัปโหลดไฟล์โดยใช้ API ประเภทอื่น (เช่น REST) และส่ง URL ของไฟล์ที่อัปโหลดไปยังการกลายพันธุ์ของ GraphQL หรือฉีดไฟล์ในบริบทการดำเนินการดังนั้นคุณจะมีไฟล์อยู่ในฟังก์ชันตัวแก้ไข
Unpredictable Execution : ลักษณะของ GraphQL คือคุณสามารถค้นหาการรวมฟิลด์อะไรก็ได้ที่คุณต้องการ แต่ความยืดหยุ่นนี้ไม่ได้ฟรี มีข้อกังวลบางประการที่ควรทราบเช่นแบบสอบถามประสิทธิภาพและ N + 1
Super Simple APIs : ในกรณีที่คุณมีบริการที่เปิดเผย API ที่เรียบง่ายจริงๆ GraphQL จะเพิ่มความซับซ้อนเป็นพิเศษเท่านั้นดังนั้น REST API แบบธรรมดาจึงดีกว่า
นี้ปัญหาที่ใหญ่ที่สุดที่ฉันเห็นกับ graphQL เช่นถ้าคุณกำลังใช้กับฐานข้อมูลเชิงสัมพันธ์อยู่กับร่วม
ความจริงที่ว่าคุณสามารถอนุญาต / ไม่อนุญาตบางฟิลด์ทำให้การรวมไม่สำคัญ (ไม่ใช่เรื่องง่าย) ซึ่งนำไปสู่การสืบค้นเพิ่มเติม
นอกจากนี้ยังซ้อนแบบสอบถามในการนำไปสู่การ graphql แบบสอบถามวงกลมและสามารถผิดพลาดเซิร์ฟเวอร์ ต้องใช้ความระมัดระวังเป็นพิเศษ
การ จำกัด อัตราการโทรกลายเป็นเรื่องยากเพราะตอนนี้ผู้ใช้สามารถส่งข้อความค้นหาหลายรายการในการโทรครั้งเดียว
เคล็ดลับ : ใช้ dataloader ของ facebook เพื่อลดจำนวนการสืบค้นในกรณีของ javascript / node
cost
ให้กับคำขอ นอกจากนี้ไม่น่ากังวลหากคุณกำลังใช้การสืบค้นที่กำหนดไว้ล่วงหน้าซึ่งลูกค้าจะส่งเฉพาะ ID เท่านั้น
มันจะดีขึ้นเรื่อย ๆ ในแต่ละปีและในตอนนี้ชุมชนของ GraphQL กำลังเติบโตขึ้นและด้วยเหตุนี้จึงมีวิธีแก้ปัญหามากมายที่เน้นในคำตอบอื่น ๆ ก่อนหน้านี้ แต่เพื่อยอมรับว่าสิ่งที่ยังคงถือ บริษัท จากการทุ่มทรัพยากรทั้งหมดไปยัง GraphQL ฉันต้องการแสดงรายการปัญหาและแนวทางแก้ไขตามด้วยปัญหาที่ยังไม่ได้แก้ไข
แต่มีอีกสองกรณีที่สามารถนับเป็นข้อเสียได้:
สรุปแล้ว GraphQL เป็นเพียงเครื่องมือสำหรับเป้าหมายที่เฉพาะเจาะจงและแน่นอนว่ามันไม่ใช่กระสุนเงินสำหรับปัญหาทั้งหมดและแน่นอนว่าไม่ใช่สิ่งทดแทนสำหรับ REST
เป็นเรื่องดีมากที่มีจุดสิ้นสุดเดียวและเปิดเผยข้อมูลทั้งหมด ฉันพบประเด็นด้านล่างที่ต้องพิจารณาสำหรับ GraphQL:
นอกจากนี้ควรพิจารณาข้อดีหลังจากการใช้งาน:
ง่ายต่อการเพิ่มเงื่อนไขโดยใช้อาร์กิวเมนต์และการสั่งซื้อที่กำหนดเองเมื่อดำเนินการแล้ว
ใช้ตัวกรองแบบกำหนดเองจำนวนมากและกำจัดการดำเนินการทั้งหมดที่ต้องสร้างตัวอย่างเช่นผู้ใช้สามารถมี id ชื่อ ฯลฯ เป็นอาร์กิวเมนต์และดำเนินการกรอง นอกจากนี้ยังสามารถใช้ตัวกรองกับกลุ่มในผู้ใช้ได้อีกด้วย
ฉันคิดว่าตอนนี้ graphql ต้องเป็นส่วนหนึ่งของสถาปัตยกรรมแบ็กเอนด์สำหรับการอัปโหลดไฟล์คุณยังคงใช้ API ปกติ