เมื่อพูดถึงการสร้าง “API” สองวิธีที่ได้รับความนิยมมากที่สุดคือ REST และ GraphQL ทั้ง REST และ GraphQL ใช้เพื่อเปิดใช้งานการสื่อสารระหว่างแอปพลิเคชันต่างๆ ผ่านทางอินเทอร์เน็ตผ่าน API แต่อะไรคือความแตกต่างที่สำคัญระหว่างทั้งสอง และแนวทางใดที่เหมาะกับ "โครงการ" ของคุณ มาดูกันดีกว่า

ส่วนที่เหลือคืออะไร?

REST หรือ Representational State Transfer เป็นรูปแบบสถาปัตยกรรมสำหรับการสร้าง API ที่ต้องอาศัยคำขอ HTTP เพื่อโต้ตอบกับทรัพยากร ใน RESTful API ทรัพยากรจะถูกระบุโดย URI ที่ไม่ซ้ำกัน (Uniform Resource Identifiers) และไคลเอ็นต์สามารถส่งคำขอไปยัง URI เหล่านี้เพื่อดึงข้อมูลหรือจัดการทรัพยากรได้

วิธี REST ขึ้นอยู่กับชุดหลักการที่กำหนดวิธีการออกแบบ API หลักการเหล่านี้รวมถึงการใช้ "วิธี HTTP" มาตรฐาน (เช่น GET, POST, PUT และ DELETE) เพื่อดำเนินการกับทรัพยากร การใช้อินเทอร์เฟซแบบเดียวกันเพื่อโต้ตอบกับทรัพยากร และอาศัยการสื่อสารไร้สถานะระหว่างไคลเอนต์และเซิร์ฟเวอร์

REST เป็นแนวทางยอดนิยมสำหรับการสร้าง API เนื่องจากมีความเรียบง่าย ยืดหยุ่น และได้รับการสนับสนุนอย่างกว้างขวางโดยภาษาและเฟรมเวิร์ก "การเขียนโปรแกรม" มากมาย อย่างไรก็ตาม ข้อเสียประการหนึ่งของ REST ก็คือไคลเอ็นต์จะต้องระบุคำขอของตนอย่างเจาะจงและกรองข้อมูลทั้งหมดที่ส่งคืนมา

ข้อดีของส่วนที่เหลือ

  • ง่ายต่อการเรียนรู้และเข้าใจ
  • เป็นที่ยอมรับและใช้กันอย่างแพร่หลาย
  • อินเทอร์เฟซที่ได้มาตรฐานและคาดเดาได้
  • กลไก "แคช" ที่มีประสิทธิภาพ

ข้อเสียของ REST

  • ความยืดหยุ่นที่จำกัดใน โครงสร้างข้อมูล
  • ต้องมีคำขอหลายครั้งเพื่อดึงข้อมูลที่เกี่ยวข้อง
  • อาจส่งผลให้มีการดึงข้อมูลมากเกินไป
  • ไม่เหมาะกับการสืบค้นที่ซับซ้อน

GraphQL คืออะไร

ในทางกลับกัน GraphQL คือภาษาคิวรีที่ช่วยให้ไคลเอ็นต์ดึงข้อมูลจากแหล่งข้อมูลหลายแหล่งในการเรียก API ครั้งเดียว GraphQL ได้รับการพัฒนาโดย Facebook และได้รับความนิยมเนื่องจากความสามารถในการดึงข้อมูลที่แม่นยำ

ด้วย GraphQL ลูกค้าสามารถระบุข้อมูลที่ต้องการได้อย่างชัดเจน และรับเฉพาะข้อมูลนั้นในการตอบสนอง ซึ่งทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับแอปพลิเคชันที่ซับซ้อนที่มีแหล่งข้อมูลหลายแหล่ง เนื่องจากช่วยให้ไคลเอ็นต์สามารถดึงข้อมูลที่จำเป็นเท่านั้นในคำขอเดียว

ข้อแตกต่างที่สำคัญประการหนึ่งระหว่าง GraphQL และ REST ก็คือ GraphQL ไม่ต้องอาศัย URI เพื่อระบุทรัพยากร แต่ไคลเอ็นต์จะส่งข้อความค้นหาไปยังตำแหน่งข้อมูลเดียว และเซิร์ฟเวอร์จะส่งคืนข้อมูลที่ร้องขอในรูปแบบ JSON

ข้อดีของ GraphQL

  • โครงสร้างข้อมูลที่ยืดหยุ่น
  • คำขอเดียวเพื่อดึงข้อมูลที่จำเป็นทั้งหมด
  • การจัดการคำถามที่ซับซ้อนอย่างมีประสิทธิภาพ
  • สคีมาที่พิมพ์อย่างแน่นหนาสำหรับการตรวจสอบข้อมูล

ข้อเสียของ GraphQL

  • ต้องใช้ความพยายามมากขึ้นในการเรียนรู้และทำความเข้าใจ
  • อาจประสบปัญหาด้านประสิทธิภาพเนื่องจากการสืบค้นที่ซับซ้อน
  • ต้องใช้ความพยายามเพิ่มเติมในการใช้แคช

ส่วนที่เหลือเทียบกับ GraphQL

ใน GraphQL มีองค์ประกอบสำคัญที่เรียกว่าสคีมา ซึ่งทำหน้าที่เป็นพิมพ์เขียวที่กำหนดข้อมูลที่เป็นไปได้ทั้งหมดที่ลูกค้าสามารถร้องขอผ่านบริการได้ ในทางกลับกัน แบบสอบถามคือการร้องขอข้อมูลที่เป็นไปตามโครงสร้างที่วางไว้ในสคีมา เมื่อมีการส่งแบบสอบถาม ตัวแก้ไขจะถูกเรียกใช้เพื่อดึงข้อมูลที่ร้องขอ ซึ่งอาจเกี่ยวข้องกับการรวบรวมข้อมูลจากแหล่งต่าง ๆ และประกอบให้ตรงกับโครงสร้างแบบสอบถาม สุดท้ายนี้ เรามีการกลายพันธุ์ซึ่งมีหน้าที่ในการเปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์ ในคำศัพท์เฉพาะของ CRUD ข้อความค้นหาจะคล้ายคลึงกับ "อ่าน" ในขณะที่การเปลี่ยนแปลงจะดูแล "สร้าง" "อัปเดต" และ "ลบ"

ตอนนี้เรามาดู "REST" กันดีกว่า ใน REST รีซอร์สคือองค์ประกอบหลัก ซึ่งแต่ละรายการมีตัวระบุเฉพาะที่เรียกว่า URI ไคลเอนต์อาจร้องขอการตอบสนองโดยใช้วิธี HTTP เช่น GET, PUT, POST และ DELETE เพื่อเข้าถึงทรัพยากรเหล่านี้ เซิร์ฟเวอร์ตอบสนองด้วยการแสดงทรัพยากรในรูปแบบ JSON หรือ XML REST API ยังอนุญาตให้ไคลเอ็นต์กรอง จัดเรียง และแบ่งหน้าข้อมูลโดยใช้พารามิเตอร์การสืบค้น

API ส่วนที่เหลือของฟีเจอร์ GraphQL การดึงข้อมูล ข้อมูลถูกดึงโดยใช้จุดสิ้นสุดเฉพาะ ข้อมูลจะถูกดึงโดยใช้จุดสิ้นสุดเดียว ช่วยลดจำนวนคำขอที่จำเป็นในการดึงข้อมูล ความซับซ้อนของแบบสอบถาม เหมาะสำหรับการสืบค้นแบบธรรมดาและการดำเนินการ CRUD เหมาะสำหรับการสืบค้นที่ซับซ้อนมากขึ้นซึ่งมีฟิลด์ที่ซ้อนกันและแหล่งข้อมูลหลายแหล่ง ขนาดการตอบสนอง ขนาดการตอบสนองสามารถใหญ่ขึ้นได้เนื่องจากการรวมข้อมูลที่ไม่จำเป็น ขนาดการตอบกลับมีขนาดเล็กลงเนื่องจากไคลเอ็นต์สามารถขอได้เฉพาะข้อมูลที่ต้องการเท่านั้น การแคช สามารถแคชได้อย่างง่ายดายโดยใช้กลไกการแคช HTTP การแคชต้องใช้ความพยายามมากขึ้นเนื่องจากความซับซ้อนของการสืบค้น คำจำกัดความของสคีมา ไม่จำเป็นต้องมีคำจำกัดความของสคีมาอย่างเป็นทางการ จำเป็นต้องมีคำจำกัดความสคีมาอย่างเป็นทางการ ซึ่งจะทำให้ API มีโครงสร้างมากขึ้น การกำหนดเวอร์ชัน ต้องมีการกำหนดเวอร์ชันเมื่อทำการเปลี่ยนแปลงกับ API การเปลี่ยนแปลงสามารถทำได้โดยไม่ต้องมีเวอร์ชัน ซึ่งช่วยลดค่าใช้จ่ายในการบำรุงรักษา API ความปลอดภัย ใช้กลไกความปลอดภัย HTTP มาตรฐาน เช่น SSL และ OAuth มอบคุณสมบัติความปลอดภัยเพิ่มเติม เช่น การตรวจสอบความถูกต้องและการอนุญาตแบบสอบถาม เครื่องมือ มีตัวเลือกเครื่องมือให้เลือกหลากหลาย มีตัวเลือกเครื่องมือน้อยลง แต่กำลังได้รับความนิยมและการสนับสนุนด้านเครื่องมือ เส้นโค้งการเรียนรู้ เรียนรู้และนำไปใช้ได้ง่าย อาจมีเส้นโค้งการเรียนรู้ที่สูงชันเนื่องจากคำจำกัดความของสคีมาอย่างเป็นทางการและการสืบค้นที่ซับซ้อนมากขึ้น ความเข้ากันได้ ทำงานได้ดีกับเครื่องมือการจัดการ API ที่มีอยู่ สามารถนำไปใช้เพิ่มเติมจาก Rest API ที่มีอยู่ และสามารถทำงานร่วมกับเครื่องมือการจัดการ API ที่มีอยู่ได้

แม้ว่า GraphQL และ REST จะมีความคล้ายคลึงกันบางประการ แต่ก็เหมาะกับกรณีการใช้งานที่แตกต่างกันมากกว่า ทั้งสองสามารถสร้าง API สำหรับแอปพลิเคชันที่แตกต่างกันเพื่อสื่อสารระหว่างกันผ่านทางอินเทอร์เน็ต นอกจากนี้ ทั้งสองยังใช้เฟรมเวิร์กและไลบรารีเพื่อจัดการรายละเอียดเครือข่าย และทั้งสองทำงานผ่าน HTTP อย่างไรก็ตาม GraphQL เป็นแบบไม่เชื่อเรื่องโปรโตคอล และทั้งคู่สามารถรองรับสัญลักษณ์อ็อบเจ็กต์ JSON หรือ JavaScript ได้

แม้จะมีความคล้ายคลึงกัน แต่ก็มีความแตกต่างที่สำคัญระหว่างเทคโนโลยีทั้งสอง เมื่อมีการสอบถาม REST API มันจะส่งคืนชุดข้อมูลทั้งหมดสำหรับทรัพยากรนั้น ในทางตรงกันข้าม GraphQL เป็นข้อกำหนดภาษาคิวรีและชุดเครื่องมือที่ช่วยให้ไคลเอ็นต์โต้ตอบกับจุดสิ้นสุดเดียวได้ REST API มักต้องการคำขอหลายคำขอเพื่อดึงข้อมูลที่เกี่ยวข้อง ในขณะที่ GraphQL สามารถรวบรวมข้อมูลทั้งหมดในคำขอเดียวโดยใช้การสืบค้นที่ซับซ้อนซึ่งเป็นไปตามสคีมา เป็นผลให้ลูกค้าได้รับสิ่งที่พวกเขาร้องขอโดยไม่ต้องดึงข้อมูลมากเกินไปโดยไม่จำเป็น

API ที่เหลือเป็นแนวคิดที่คุ้นเคยสำหรับนักพัฒนาส่วนใหญ่ ในขณะที่ GraphQL อาจนำเสนอช่วงการเรียนรู้เล็กน้อยสำหรับบางคน API ที่เหลือเหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการการดำเนินการ CRUD แบบธรรมดา ตัวอย่างเช่น เว็บไซต์อีคอมเมิร์ซอาจใช้ API ที่เหลือเพื่อให้ลูกค้าสามารถเรียกดูผลิตภัณฑ์ เพิ่มสินค้าลงในรถเข็น และดำเนินการตามคำสั่งซื้อได้ ในกรณีนี้ API จะใช้วิธีการ HTTP เช่น GET, PUT, POST และ DELETE เพื่อจัดการข้อมูล เช่น ผลิตภัณฑ์ คำสั่งซื้อ และข้อมูลลูกค้า

สถาปัตยกรรม

REST เป็นไปตาม "สถาปัตยกรรมไคลเอนต์-เซิร์ฟเวอร์" โดยที่ไคลเอนต์ทำการร้องขอไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์ตอบสนองด้วยทรัพยากร REST ใช้กริยา HTTP เพื่อดำเนินการ CRUD กับทรัพยากร

ในทางกลับกัน GraphQL เป็นไปตามสถาปัตยกรรมที่ขับเคลื่อนโดยไคลเอนต์ โดยที่ไคลเอนต์ระบุโครงสร้างของข้อมูลที่ต้องการ และเซิร์ฟเวอร์ตอบสนองด้วยข้อมูลที่ร้องขอ

ผลงาน

RESTful API ขึ้นชื่อในเรื่อง "ประสิทธิภาพสูง" เนื่องจากใช้โปรโตคอล HTTP มาตรฐานในการสื่อสาร RESTful API ยังสามารถแคชได้อย่างง่ายดาย ทำให้รวดเร็วและมีประสิทธิภาพมากขึ้น

ในทางกลับกัน GraphQL อาจประสบปัญหาด้านประสิทธิภาพเนื่องจากความซับซ้อนของการสืบค้น เนื่องจากลูกค้าสามารถขอข้อมูลที่ต้องการได้ การสืบค้น GraphQL จึงมีความซับซ้อนมาก ส่งผลให้เวลาตอบสนองช้าลง

ความซับซ้อนของแบบสอบถาม

ใน RESTful API ไคลเอ็นต์จำเป็นต้องส่งคำขอหลายครั้งเพื่อดึงข้อมูลที่เกี่ยวข้อง ซึ่งอาจส่งผลให้เกิดตรรกะฝั่งไคลเอ็นต์ที่ซับซ้อนในการจัดการความสัมพันธ์ระหว่างทรัพยากร

ใน GraphQL ไคลเอนต์ระบุข้อมูลที่ต้องการ และเซิร์ฟเวอร์ส่งคืนเฉพาะข้อมูลนั้น รวมถึงข้อมูลที่เกี่ยวข้องด้วย สิ่งนี้ช่วยลดความซับซ้อนของตรรกะฝั่งไคลเอ็นต์และลดจำนวนคำขอที่ต้องการ

การดึงข้อมูลมากเกินไปและการดึงข้อมูลน้อยเกินไป

ใน RESTful API ไคลเอ็นต์จะดึงทรัพยากรทั้งหมด แม้ว่าพวกเขาต้องการเพียงบางส่วนเท่านั้นก็ตาม สิ่งนี้เรียกว่าการดึงข้อมูลมากเกินไป และอาจส่งผลให้มีการใช้งานเครือข่ายโดยไม่จำเป็นและเวลาตอบสนองช้าลง

ใน GraphQL ลูกค้าสามารถขอได้เฉพาะข้อมูลที่จำเป็น ซึ่งช่วยลดการดึงข้อมูลมากเกินไป อย่างไรก็ตาม หากไคลเอ็นต์ร้องขอข้อมูลน้อยเกินไป อาจส่งผลให้มีการดึงข้อมูลน้อยเกินไป ซึ่งจำเป็นต้องมีคำขอเพิ่มเติมเพื่อเรียกข้อมูลที่ขาดหายไป

เก็บเอาไว้

RESTful API สามารถแคชได้อย่างง่ายดาย เนื่องจากโปรโตคอล HTTP มาตรฐานมีกลไกการแคชในตัว สิ่งนี้ทำให้ RESTful API เร็วขึ้นและมีประสิทธิภาพมากขึ้น

GraphQL ไม่มีกลไกการแคชในตัว เนื่องจากการสืบค้นอาจซับซ้อนและไดนามิกมาก การแคชแบบสอบถาม GraphQL ต้องใช้ความพยายามมากขึ้นและอาจไม่มีประสิทธิภาพเท่ากับการแคช RESTful API

บทสรุปสุดท้าย

GraphQL เหมาะกว่าสำหรับแอปพลิเคชันที่ต้องการคำขอข้อมูลที่ซับซ้อนมากขึ้น

RESTful API มีประโยชน์สำหรับแอปพลิเคชันที่ต้องดำเนินการ CRUD กับทรัพยากร เช่น การสร้าง การอ่าน การอัปเดต และการลบข้อมูล

สิ่งที่ฉันหมายถึงคือ GraphQL มีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับฟิลด์ที่ซ้อนกันหรือแหล่งข้อมูลหลายแหล่ง ตัวอย่างเช่น บริษัทที่จัดเตรียมชุดเครื่องมือการวางแผนทางการเงินให้กับลูกค้าอาจต้องการข้อมูลจากหลายแหล่ง เช่น ธุรกรรมธนาคาร พอร์ตการลงทุน และคะแนนเครดิต ด้วย GraphQL บริษัทสามารถสร้างจุดสิ้นสุด API เดียวที่ช่วยให้ลูกค้าสามารถสืบค้นข้อมูลทั้งหมดในคำขอเดียว ลูกค้าสามารถระบุข้อมูลที่ต้องการได้อย่างง่ายดาย และเซิร์ฟเวอร์จะใช้ชุดตัวแก้ไข เพื่อดึงข้อมูลที่จำเป็นจากแต่ละแหล่งและประกอบเข้ากับการตอบกลับที่ตรงกับโครงสร้างการสืบค้น

Rest และ GraphQL สามารถทำงานร่วมกันได้ เนื่องจาก GraphQL ไม่ได้กำหนดสถาปัตยกรรมแอปพลิเคชันเฉพาะ สามารถนำไปใช้เพิ่มเติมจาก Rest API ที่มีอยู่และสามารถทำงานร่วมกับเครื่องมือการจัดการ API ที่มีอยู่ได้ ทั้ง Rest และ GraphQL มีจุดแข็งและนิสัยเฉพาะตัว และการทำความเข้าใจความเหมือนและความแตกต่างจะช่วยให้คุณเลือกเครื่องมือที่เหมาะสมสำหรับงานได้

คำถามที่พบบ่อย

คุณสามารถใช้ทั้ง REST และ GraphQL ในแอปพลิเคชันเดียวกันได้หรือไม่

ใช่ คุณสามารถใช้ทั้ง REST และ GraphQL ในแอปพลิเคชันเดียวกันได้ ขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชัน

GraphQL เร็วกว่า REST หรือไม่

GraphQL อาจประสบปัญหาด้านประสิทธิภาพเนื่องจากความซับซ้อนของการสืบค้น ในขณะที่ RESTful API ขึ้นชื่อเรื่องประสิทธิภาพสูง อย่างไรก็ตาม GraphQL อาจเร็วกว่าได้ในบางกรณีที่ไคลเอ็นต์จำเป็นต้องดึงข้อมูลที่เกี่ยวข้องจำนวนมากในคำขอเดียว

GraphQL สามารถแทนที่ REST ได้หรือไม่

GraphQL และ REST มีจุดแข็งและจุดอ่อนที่แตกต่างกัน และตัวเลือกระหว่างจุดแข็งและจุดอ่อนเหล่านี้ขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชัน ไม่จำเป็นต้องเป็นการแทนที่อีกกรณีหนึ่ง

GraphQL ปลอดภัยกว่า REST หรือไม่

ทั้ง GraphQL และ REST สามารถรักษาความปลอดภัยได้โดยใช้กลไกความปลอดภัยมาตรฐาน เช่น การตรวจสอบสิทธิ์และการอนุญาต ความปลอดภัยของ API ขึ้นอยู่กับวิธีการนำไปใช้และกำหนดค่า

บริษัทยอดนิยมใดบ้างที่ใช้ GraphQL

บริษัทยอดนิยมบางแห่งที่ใช้ GraphQL ได้แก่ Facebook, GitHub และ Shopify