เฮ้! ในฐานะผู้ให้บริการ API ฉันได้เห็นโดยตรงแล้วว่า GraphQL กลายเป็นเกม ผู้เปลี่ยนโลกของ API ได้อย่างไร ในบล็อกนี้ ฉันจะอธิบายวิธีสร้าง GraphQL API ให้คุณทราบ
ทำความเข้าใจพื้นฐาน GraphQL
ก่อนอื่น เรามาทำความเข้าใจก่อนว่า GraphQL คืออะไร ต่างจาก REST ซึ่งมีชุดจุดสิ้นสุดคงที่ซึ่งส่งคืนโครงสร้างข้อมูลที่กำหนดไว้ล่วงหน้า GraphQL ช่วยให้ลูกค้าระบุข้อมูลที่ต้องการได้อย่างชัดเจน ซึ่งหมายถึงการดึงข้อมูลมากเกินไปหรือน้อยเกินไป ซึ่งถือเป็นข้อดีอย่างมาก
ลองจินตนาการว่าคุณกำลังสร้างแอปที่ต้องการข้อมูลผู้ใช้ ด้วย REST API คุณอาจมีจุดสิ้นสุดเช่น/ผู้ใช้/:idที่ส่งคืนข้อมูลผู้ใช้ทั้งหมด ซึ่งบางข้อมูลแอปของคุณอาจไม่ได้ใช้ด้วยซ้ำ แต่ด้วย GraphQL ลูกค้าสามารถส่งข้อความค้นหาดังนี้:
แบบสอบถาม { ผู้ใช้ (id: "123") { อีเมลชื่อ } }
และมันจะได้รับเพียงชื่อและอีเมลช่องของผู้ใช้ที่มี ID123-
การตั้งค่าสภาพแวดล้อม
หากต้องการสร้าง GraphQL API คุณจะต้องมีเครื่องมือบางอย่าง เซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุดสำหรับการสร้างเซิร์ฟเวอร์ GraphQL คือ Apollo Server ซึ่งทำงานได้ดีกับ Node.js ดังนั้น หากคุณยังไม่ได้ติดตั้ง ให้ติดตั้ง Node.js บนเครื่องของคุณ
เมื่อคุณเปิดใช้งาน Node.js แล้ว ให้สร้างไดเร็กทอรีใหม่สำหรับโปรเจ็กต์ของคุณและไปที่ไดเร็กทอรีในเทอร์มินัลของคุณ จากนั้นเริ่มต้นโปรเจ็กต์ Node.js ใหม่โดยการรัน:
npm เริ่มต้น -y
สิ่งนี้จะสร้างแพ็คเกจ.jsonไฟล์ในไดเร็กทอรีโครงการของคุณ
ถัดไป ติดตั้ง Apollo Server และ GraphQL:
npm ติดตั้ง apollo-server graphql
การกำหนดสคีมา
สคีมาเป็นหัวใจของ GraphQL API โดยจะกำหนดประเภทของข้อมูลที่ลูกค้าสามารถสอบถามและความสัมพันธ์ระหว่างข้อมูลเหล่านั้น
สมมติว่าเรากำลังสร้าง API สำหรับไลบรารีแบบง่าย เราอาจจะมีประเภทสำหรับหนังสือ-ผู้เขียน, และประเภท- ต่อไปนี้คือวิธีที่คุณสามารถกำหนดสคีมาพื้นฐานใน JavaScript:
const { gql } = ต้องการ ('apollo-server'); const typeDefs = หนังสือประเภท gql` { id: ID! ชื่อเรื่อง : สตริง! ผู้เขียน: ผู้เขียน! ประเภท: ประเภท! } พิมพ์ผู้แต่ง { id: ID! ชื่อ : สตริง! หนังสือ: [หนังสือ!]! } ประเภทประเภท { id: ID! ชื่อ : สตริง! หนังสือ: [หนังสือ!]! } พิมพ์แบบสอบถาม { หนังสือ: [หนังสือ!]! หนังสือ(id: ID!): ผู้แต่งหนังสือ: [ผู้แต่ง!]! ผู้แต่ง(id: ID!): ประเภทผู้แต่ง: [ประเภท!]! ประเภท(id: ID!): ประเภท } `; module.exports = typeDefs;
ในสคีมานี้ เราได้กำหนดสามประเภท (หนังสือ-ผู้เขียน, และประเภท) และกแบบสอบถามประเภทที่ช่วยให้ลูกค้าดึงข้อมูลได้ ที่-สัญลักษณ์หมายความว่าจำเป็นต้องกรอกข้อมูล
รีโซลเวอร์
ตัวแก้ไขคือฟังก์ชันที่บอก GraphQL ถึงวิธีรับข้อมูลสำหรับแต่ละฟิลด์ในสคีมา ตัวอย่างเช่น ตัวแก้ไขสำหรับหนังสือสนามในแบบสอบถามtype อาจดึงรายการหนังสือจากฐานข้อมูล
ต่อไปนี้เป็นชุดตัวแก้ไขอย่างง่ายสำหรับไลบรารี API ของเรา:
const { หนังสือ ผู้แต่ง ประเภท } = need('./data'); const solvers = { แบบสอบถาม: { หนังสือ: () => หนังสือ, หนังสือ: (parent, { id }) => books.find(book => book.id === id), authors: () => authors, author: (parent, { id }) => authors.find(author => author.id === id), ประเภท: () => ประเภท, ประเภท: (parent, { id }) => ประเภท.find(genre => ประเภท.id === id) }, หนังสือ: { author: (book) => authors.find(author => author.id === book.authorId), ประเภท: (book) => ประเภท.find(genre => ประเภท.id === book.genreId) }, ผู้แต่ง: { หนังสือ: (author) => books.filter(book => book.authorId === author.id) }, ประเภท: { หนังสือ: (ประเภท) => books.filter(book => book.genreId === ประเภท.id) } }; module.exports = ตัวแก้ไข;
ในโค้ดนี้ เราถือว่าเรามีข้อมูลตัวอย่างบางส่วนอยู่ในข้อมูล.jsไฟล์. ตัวแก้ไขสำหรับแบบสอบถามtype ส่งคืนข้อมูลที่เหมาะสม และตัวแก้ไขสำหรับประเภทอื่นจะจัดการความสัมพันธ์ระหว่างประเภทนั้น
การสร้างเซิร์ฟเวอร์
ตอนนี้เรามีสคีมาและรีโซลเวอร์แล้ว ก็ถึงเวลาสร้าง Apollo Server
const { ApolloServer } = ต้องการ ('apollo-server'); const typeDefs = ต้องการ ('./schema'); ตัวแก้ไข const = ต้องการ ('./ ตัวแก้ไข'); เซิร์ฟเวอร์ const = ApolloServer ใหม่ ({ typeDefs, ตัวแก้ไข }); server.listen().then(({ url }) => { console.log(`เซิร์ฟเวอร์พร้อมที่ ${url}`); });
เมื่อคุณรันโค้ดนี้ด้วยโหนด index.js(สมมติว่าไฟล์ของคุณชื่อดัชนี js) เซิร์ฟเวอร์จะเริ่มทำงานบนพอร์ตในเครื่อง และคุณสามารถเข้าถึงสนามเด็กเล่น GraphQL ได้ที่ URL ที่พิมพ์ในคอนโซล
การทดสอบ API
เมื่อเซิร์ฟเวอร์ทำงาน คุณสามารถทดสอบ API ของคุณได้โดยใช้ GraphQL Playground เปิด URL ในเบราว์เซอร์ของคุณ แล้วคุณจะเห็นอินเทอร์เฟซที่คุณสามารถเขียนคำสั่งและการเปลี่ยนแปลงได้
ตัวอย่างเช่น คุณสามารถเขียนแบบสอบถามเพื่อรับหนังสือทั้งหมด:
แบบสอบถาม { หนังสือ { ผู้แต่งชื่อ { ชื่อ } } }
แบบสอบถามนี้จะส่งคืนรายชื่อหนังสือพร้อมชื่อหนังสือและชื่อผู้แต่ง
ความปลอดภัยและประสิทธิภาพ
เมื่อสร้าง GraphQL API ความปลอดภัยและประสิทธิภาพเป็นสิ่งสำคัญ คุณต้องตรวจสอบให้แน่ใจว่าลูกค้าสามารถเข้าถึงเฉพาะข้อมูลที่พวกเขาได้รับอนุญาตให้ดูเท่านั้น วิธีหนึ่งในการทำเช่นนี้คือการใช้กลไกการรับรองความถูกต้องและการอนุญาต
เพื่อประสิทธิภาพ คุณสามารถใช้เทคนิคต่างๆ เช่น การแคชและการแบทช์ Apollo Server มีการสนับสนุนแคชในตัว และคุณสามารถใช้ไลบรารีได้เช่นตัวโหลดข้อมูลสำหรับการร้องขอฐานข้อมูลเป็นกลุ่ม


บูรณาการกับระบบที่มีอยู่
ในฐานะผู้ให้บริการ API คุณอาจต้องผสานรวม GraphQL API ของคุณกับระบบที่มีอยู่ เช่น ฐานข้อมูลหรือ API อื่นๆ คุณสามารถใช้ตัวเชื่อมต่อหรืออะแดปเตอร์เพื่อโต้ตอบกับระบบเหล่านี้ ตัวอย่างเช่น หากคุณใช้ฐานข้อมูล PostgreSQL คุณสามารถใช้หน้าไลบรารีเพื่อเชื่อมต่อและดึงข้อมูล
บทสรุป
การสร้าง GraphQL API เป็นวิธีที่ยอดเยี่ยมในการมอบการเข้าถึงข้อมูลที่ยืดหยุ่นและมีประสิทธิภาพให้กับลูกค้าของคุณ ด้วยการทำตามขั้นตอนที่ระบุไว้ในบล็อกนี้ คุณจะสามารถสร้าง GraphQL API ที่มีประสิทธิภาพซึ่งตรงกับความต้องการของผู้ใช้ของคุณได้
หากคุณสนใจที่จะใช้บริการ API ของเราหรือมีคำถามใดๆ เกี่ยวกับการพัฒนา GraphQL API โปรดติดต่อเราเพื่อหารือเกี่ยวกับการจัดซื้อจัดจ้าง เรายินดีเสมอที่จะพูดคุยและช่วยคุณค้นหาโซลูชันที่ดีที่สุดสำหรับธุรกิจของคุณ
เรายังนำเสนอ API ที่เกี่ยวข้องกับอุตสาหกรรมต่างๆ ตัวอย่างเช่น หากคุณอยู่ในอุตสาหกรรมยา คุณอาจสนใจ API ที่เกี่ยวข้องกับผลิตภัณฑ์เช่นอนาสโตรโซลและไกวเฟเนซิน- คุณสามารถตรวจสอบเพิ่มเติมเกี่ยวกับอนาสโตรโซลบนเว็บไซต์ของเรา
อ้างอิง
- เอกสารประกอบเซิร์ฟเวอร์ Apollo
- ข้อกำหนด GraphQL
- เอกสาร Node.js
