พื้นฐาน GraphQL สำหรับนักพัฒนา React
ทำความเข้าใจคิวรี การกลายข้อมูล การสมัครรับข้อมูล และสคีมาของ GraphQL จากมุมมองนักพัฒนาฝั่งหน้าเว็บ
พื้นฐาน GraphQL สำหรับนักพัฒนา React เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
GraphQL กับ REST
REST เปิดเผยจุดปลายทางที่มีรูปแบบตายตัว: GET /users/:id จะส่งคืนออบเจ็กต์ผู้ใช้ทั้งหมด ไม่ว่าความต้องการของไคลเอ็นต์จะเป็นอย่างไร GraphQL ช่วยให้ไคลเอ็นต์ระบุฟิลด์ที่ต้องการได้อย่างแม่นยำ จึงขจัดการดึงข้อมูลเกินจำเป็นและการดึงข้อมูลไม่เพียงพอ ซึ่งต้องส่งคำขอหลายครั้ง
คิวรี GraphQL เพียงครั้งเดียวสามารถดึงข้อมูลผู้ใช้ โพสต์ของผู้ใช้ และผู้เขียนของแต่ละโพสต์ได้ภายในการเดินทางไปกลับครั้งเดียว
สคีมา GraphQL
API ของ GraphQL ทุกแห่งกำหนดด้วยสคีมาที่เขียนด้วย SDL สคีมาจะประกาศชนิดข้อมูล ฟิลด์ และชนิดข้อมูลระดับรากสำหรับคิวรี มิวเทชัน และการสมัครรับข้อมูล ซึ่งไคลเอ็นต์สามารถดำเนินการได้
สคีมาคือสัญญาระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ เมื่อเห็นพ้องกับสคีมาแล้ว ทีมส่วนหน้าและทีมส่วนหลังสามารถทำงานขนานกันได้
การเขียนคิวรี GraphQL
คิวรี GraphQL เลือกฟิลด์: { user(id: "1") { name email posts { title } } } ฟิลด์ซ้อนกันช่วยไล่ตามความสัมพันธ์ได้ภายในการส่งคำขอเดียว นามแฝงใช้เปลี่ยนชื่อฟิลด์: { me: user(id: "1") { name } } ส่วนย่อยช่วยนำการเลือกฟิลด์กลับมาใช้ซ้ำในหลายคิวรี
ตัวแปรทำให้คิวรีนำกลับมาใช้ซ้ำได้: query GetUser($id: ID!) { user(id: $id) { name } } พร้อมตัวแปร: { id: "1" }
ตัวแก้ไขบนเซิร์ฟเวอร์
แต่ละฟิลด์ในสคีมา GraphQL มีฟังก์ชันตัวแก้ไขบนเซิร์ฟเวอร์ เมื่อไคลเอ็นต์คิวรี user.name ตัวแก้ไข user จะดึงออบเจ็กต์ผู้ใช้ และตัวแก้ไข name (หรือตัวแก้ไขเริ่มต้น) จะส่งคืนฟิลด์ name
การแก้ไขระดับฟิลด์นี้ทำให้ GraphQL สามารถดึงเฉพาะข้อมูลที่ร้องขอได้อย่างแม่นยำ
ปัญหา N+1
หากคุณคิวรีรายการโพสต์ 100 รายการและแต่ละโพสต์มีผู้เขียน การนำไปใช้แบบตรงไปตรงมาจะส่งคำขอฐานข้อมูลแยกกัน 100 ครั้งเพื่อดึงข้อมูลผู้เขียน ปัญหา N+1 นี้ทำให้ API ของ GraphQL ทำงานช้าหากไม่มีการปรับให้เหมาะสม
DataLoader แก้ปัญหา N+1 ด้วยการรวมการค้นหาผู้เขียนทั้งหมดเป็นคำขอฐานข้อมูลเดียว โดยใช้แคชต่อคำขอและฟังก์ชันรวมกลุ่ม
GraphQL Playground และ Apollo Studio
Apollo Studio และ GraphQL Playground เป็นส่วนติดต่อผู้ใช้บนเบราว์เซอร์สำหรับสำรวจ GraphQL API แบบโต้ตอบ ทั้งสองสามารถเติมฟิลด์จากสคีมาให้โดยอัตโนมัติ แสดงผลลัพธ์คิวรี และแสดงเอกสารประเภทข้อมูลในบรรทัดได้
การใช้ GraphQL Playground เป็นวิธีที่เร็วที่สุดในการทำความเข้าใจ GraphQL API ที่ไม่คุ้นเคย ก่อนเขียนโค้ดฝั่งไคลเอ็นต์
การตรวจสอบประเภทข้อมูล
GraphQL API เปิดเผยสคีมาของตนเองผ่านคิวรีตรวจสอบโครงสร้าง: { __schema { types { name } } } ไคลเอ็นต์สามารถส่งคิวรีไปยังสคีมาเองเพื่อค้นหาประเภทข้อมูล ฟิลด์ และอาร์กิวเมนต์ที่มีอยู่
เครื่องมือสร้างโค้ด เช่น graphql-codegen ใช้การตรวจสอบโครงสร้างเพื่อสร้างประเภท TypeScript ที่ตรงกับสคีมา API โดยอัตโนมัติ
มิวเทชันและซับสคริปชัน
มิวเทชันของ GraphQL ใช้แก้ไขข้อมูล: mutation CreatePost($input: PostInput!) { createPost(input: $input) { id title } } ซับสคริปชันสร้างการเชื่อมต่อแบบคงอยู่ (โดยปกติใช้ WebSocket) และส่งการอัปเดตไปยังไคลเอ็นต์: subscription { postAdded { id title } }
ประเภทระดับรากทั้งสามประเภท (Query, Mutation, Subscription) ใช้ไวยากรณ์การเลือกฟิลด์แบบเดียวกัน
จุดเด่นของ GraphQL เมื่อเทียบกับ REST
GraphQL เหมาะอย่างยิ่งกับแอปพลิเคชันที่มีความต้องการข้อมูลซับซ้อนแบบซ้อนชั้น มีไคลเอ็นต์หลายประเภท (มือถือ เว็บ TV) ที่ต้องการชุดฟิลด์แตกต่างกัน หรือมี API ที่พัฒนาอย่างรวดเร็ว ซึ่งการเลิกใช้ฟิลด์เหมาะสมกว่าการกำหนดเวอร์ชันของจุดปลายทาง
REST เรียบง่ายกว่าสำหรับ API แบบ CRUD ที่มีรูปร่างทรัพยากรแบบแบนและคาดเดาได้ รวมทั้งมีคุณสมบัติการแคช HTTP ที่ดีเยี่ยมผ่าน ETag และส่วนหัวแคช
ไคลเอ็นต์ GraphQL: Apollo, URQL, React Query
Apollo Client เป็นไคลเอ็นต์ GraphQL ที่มีฟีเจอร์ครบถ้วนที่สุด ได้แก่ แคชแบบจัดข้อมูลให้เป็นมาตรฐาน การจัดการสถานะภายในเครื่อง ซับสคริปชัน และลิงก์จัดการข้อผิดพลาด URQL มีน้ำหนักเบากว่า โดยใช้แคชเอกสารและมี API ที่เรียบง่ายกว่า React Query ที่ใช้ร่วมกับ graphql-request เป็นแนวทางที่ง่ายที่สุดสำหรับคิวรีและมิวเทชันพื้นฐานที่ไม่ต้องการความสามารถด้านแคชขั้นสูง
ให้เลือกตามข้อกำหนดด้านแคชของคุณ: ใช้แคชแบบจัดข้อมูลให้เป็นมาตรฐานสำหรับเอนทิตีที่ใช้ร่วมกันในหลายคิวรี (Apollo) หรือใช้แคชเอกสารที่เรียบง่ายกว่าสำหรับคิวรีที่แยกจากกัน (URQL หรือ React Query)
ตัวอย่าง SDL
ตัวอย่าง SDL อย่างง่าย: type User { id: ID! name: String! posts: [Post!]! } type Post { id: ID! title: String! author: User! } type Query { user(id: ID!): User users: [User!]! } เครื่องหมายอัศเจรีย์ระบุว่าฟิลด์นั้นไม่เป็นค่าว่าง
สคีมานี้บอกไคลเอ็นต์อย่างชัดเจนว่าแต่ละประเภทมีฟิลด์ใดบ้าง และมีคิวรีใดให้ใช้ได้ จึงทำให้สร้างโค้ดที่ปลอดภัยด้านประเภทข้อมูลได้
การดึงข้อมูลมากเกินไปหรือน้อยเกินไปใน GraphQL
ในบริบทของ REST กับ GraphQL คำว่า "การดึงข้อมูลมากเกินไป" หมายถึงอะไร
สรุปบทเรียน
GraphQL ช่วยให้ไคลเอ็นต์ร้องขอเฉพาะฟิลด์ที่ต้องการได้ (ไม่ดึงข้อมูลมากหรือน้อยเกินไป) โดยใช้ภาษาคิวรีที่กำหนดด้วยสคีมา ตัวแก้ไขจะตอบข้อมูลของแต่ละฟิลด์ ส่วน DataLoader แก้ปัญหา N+1 การตรวจสอบโครงสร้างช่วยให้สร้างประเภท TypeScript ได้โดยอัตโนมัติ Apollo Client, URQL และ React Query เป็นไคลเอ็นต์ GraphQL หลักที่ใช้ร่วมกับ React ได้
เลือก GraphQL เมื่อมีความต้องการข้อมูลซับซ้อน แบบซ้อนชั้น และรองรับไคลเอ็นต์หลายประเภท ส่วน REST เหมาะกับ CRUD ที่เรียบง่ายและมีรูปร่างข้อมูลคาดเดาได้
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน GraphQL สำหรับนักพัฒนา React” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน GraphQL สำหรับนักพัฒนา React” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน GraphQL สำหรับนักพัฒนา React”
ทำความเข้าใจคิวรี การกลายข้อมูล การสมัครรับข้อมูล และสคีมาของ GraphQL จากมุมมองนักพัฒนาฝั่งหน้าเว็บ คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน GraphQL สำหรับนักพัฒนา React” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน GraphQL สำหรับนักพัฒนา React
- การตั้งค่า Apollo Client ใน React
- ฮุก useQuery และ useMutation
- แคช Apollo: การทำให้เป็นมาตรฐานและการอัปเดต