เครื่องมือ, Federation และการสร้างเซอร์วิส
ทุกโมดูลก่อนหน้านี้สอนคุณให้ ออกแบบ schema ทั้ง types, resolvers, mutations, pagination, errors และ security โมดูลนี้พูดถึงทุกสิ่งที่เปลี่ยนการออกแบบที่ดีให้กลายเป็นเซอร์วิสที่ทีมงานจริงนำไปใช้งานได้ schema ที่อยู่ลำพังเป็นเพียงเอกสารหนึ่งฉบับ แต่ service คือเอกสารฉบับนั้นที่ถูกทำให้รันได้ มี type มีการ test และเมื่อทีมเดียวกับกระบวนการเดียวไม่เพียงพออีกต่อไป ก็ถูกแยกออกไปหลายระบบและประกอบกลับเป็นกราฟเดียว
จากแบบร่างสู่เซอร์วิส
หัวข้อที่มีชื่อว่า “จากแบบร่างสู่เซอร์วิส”schema ที่ออกแบบไว้เปรียบเหมือนแบบร่างของสถาปนิก แม่นยำและเป็น contract ก็จริง แต่ไม่มีใครอาศัยอยู่ในแบบร่างได้ มีสี่สิ่งที่ขวางอยู่ระหว่างแบบร่างกับอาคารที่คนใช้งานได้จริง
- Implement — เลือกว่า SDL กับcode resolver จะสัมพันธ์กันอย่างไร SDL เป็น source of truth (schema-first) หรือถูก generate มาจากcodeของคุณ (code-first)? ตัวเลือกนี้กำหนดรูปร่างของ codebase ทั้งหมด
- Type & document — เชื่อม schema เข้ากับ type system ของภาษาที่ใช้ เพื่อให้ compiler จับ resolver ที่ผิดได้ก่อนที่ client จะเจอ GraphQL Code Generator แปลง schema ให้เป็น TypeScript types ทั้งฝั่ง server และ client
- Test — พิสูจน์ว่าเซอร์วิสทำงานถูกต้อง ทำ unit-test กับ resolver แต่ละตัว และ integration-test ด้วยการรัน operation จริงกับ schema แล้วตรวจสอบผลลัพธ์
- Federate — เมื่อกราฟใหญ่เกินกว่าเซอร์วิสเดียวจะรับไหว ก็แยกออกเป็น subgraphs ที่ทีมต่าง ๆ เป็นเจ้าของ แล้วประกอบกลับเป็น supergraph เดียวหลัง gateway
โมดูลนี้ครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “โมดูลนี้ครอบคลุมอะไรบ้าง”flowchart LR Design["Design (earlier modules)"] Implement["Implement (schema-first / code-first)"] Test["Type & Test (codegen + tests)"] Federate["Federate (subgraphs + gateway)"] Service["Running GraphQL service"] Design --> Implement Implement --> Test Test --> Federate Federate --> Service Test --> Service
อ่าน flow นั้นเป็น pipeline ที่คุณเริ่มไปแล้ว Design อยู่ข้างหลังคุณแล้ว ตอนนี้คุณตัดสินใจว่าจะ implement อย่างไร คุณทำให้ implementation นั้นมี type และผ่านการ test และเมื่อเซอร์วิสเดียวเริ่มแบกหลายทีมไม่ไหวเท่านั้น คุณจึงหันไปหา federation บทเรียนสุดท้ายดึงทุกอย่างมารวมกันใน TypeScript server ที่ทำงานได้จริง
แต่ละบทเรียนครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “แต่ละบทเรียนครอบคลุมอะไรบ้าง”- Schema-first vs code-first — สองวิธีในการสร้าง GraphQL server, ข้อแลกเปลี่ยนของแต่ละแบบ และเดโมที่ทั้งสองสไตล์ให้ schema เดียวกันเป๊ะ
- Codegen and testing — การ generate resolvers และ operations ที่มี type พร้อมกลยุทธ์ unit และ integration testing ที่คุณนำไปใช้ได้วันนี้
- Federation — การแยกกราฟตาม domain ออกเป็น subgraphs, entities และ references และการประกอบ supergraph หลัง gateway
- Building with Yoga — การ implement ด้วย TypeScript ที่ครบถ้วนและรันได้จริงด้วย GraphQL Yoga ซึ่งผูก typeDefs, resolvers และ context เข้าด้วยกัน
เมื่อจบ คุณจะสามารถนำ schema ใด ๆ ที่คุณออกแบบไว้ในโมดูลก่อนหน้า มาตั้งขึ้นเป็น GraphQL service ที่มีเอกสาร มี type ผ่านการ test และหากจำเป็น ก็ federate ได้