วิธีสร้าง Secure Node.js GraphQL API
เผยแพร่แล้ว: 2022-03-11ในบทความนี้ เรามุ่งหวังที่จะนำเสนอคำแนะนำอย่างรวดเร็วเกี่ยวกับวิธีสร้าง Node.js GraphQL API ที่ปลอดภัย
คำถามบางข้อที่อาจผุดขึ้นในใจอาจเป็น:
- จุดประสงค์ของการใช้ GraphQL API คืออะไร
- GraphQL API คืออะไร
- แบบสอบถาม GraphQL คืออะไร
- GraphQL มีประโยชน์อย่างไร?
- GraphQL ดีกว่า REST หรือไม่
- เหตุใดเราจึงใช้ Node.js
ทั้งหมดนี้เป็นคำถามที่ถูกต้อง แต่ก่อนที่จะตอบคำถาม เราควรเจาะลึกภาพรวมโดยสังเขปของสถานะปัจจุบันของการพัฒนาเว็บ:
- เกือบทุกโซลูชันที่คุณพบในปัจจุบันใช้อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) บางประเภท
- แม้ว่าคุณจะใช้เครือข่ายโซเชียล เช่น Facebook หรือ Instagram คุณยังคงเชื่อมต่อกับส่วนหน้าที่ใช้ API
- หากคุณสงสัย คุณจะพบว่าบริการความบันเทิงออนไลน์เกือบทั้งหมดใช้ API ประเภทต่างๆ รวมถึงบริการต่างๆ เช่น Netflix, Spotify และ YouTube
ในแทบทุกสถานการณ์ คุณจะพบ API ที่คุณไม่จำเป็นต้องรู้ในรายละเอียด เช่น คุณไม่จำเป็นต้องรู้ว่ามันถูกสร้างขึ้นมาอย่างไร และคุณไม่จำเป็นต้องใช้เทคโนโลยีเดียวกันกับที่เคยเป็น สามารถรวมเข้ากับระบบของคุณเองได้ API ที่มีให้ทำให้คุณสามารถเสนอวิธีการสื่อสารระหว่างบริการต่างๆ ในมาตรฐานทั่วไปที่ทั้งบริการและไคลเอ็นต์สามารถสื่อสารได้โดยไม่ต้องพึ่งพากลุ่มเทคโนโลยีเฉพาะ
ด้วย API ที่มีโครงสร้างที่ดี เป็นไปได้ที่จะมี API ที่มั่นคง บำรุงรักษาได้ และปรับขนาดได้ ซึ่งสามารถให้บริการไคลเอ็นต์และแอปพลิเคชันส่วนหน้าได้หลายประเภท
ที่กล่าวว่า GraphQL API คือ อะไร?
GraphQL เป็นภาษาคิวรีสำหรับ API ที่พัฒนาขึ้นสำหรับใช้ภายใน Facebook และเผยแพร่เพื่อการใช้งานสาธารณะในปี 2015 รองรับการอ่าน การเขียน และการอัปเดตแบบเรียลไทม์ นอกจากนี้ยังเป็นโอเพ่นซอร์สและโดยทั่วไปจะเปรียบเทียบกับ REST และสถาปัตยกรรมอื่นๆ โดยสรุปมีพื้นฐานมาจาก:
- แบบสอบถาม GraphQL - ช่วยให้ลูกค้าสามารถอ่านและจัดการวิธีการรับข้อมูลได้
- การกลายพันธุ์ของ GraphQL - นี่คือวิธีการเขียนข้อมูลบนเซิร์ฟเวอร์ เป็นหลักการของ GraphQL เกี่ยวกับวิธีการเขียนข้อมูลลงในระบบ
แม้ว่าบทความนี้จะแสดงให้เห็นถึงสถานการณ์ที่เรียบง่ายแต่ใช้งานได้จริงเกี่ยวกับวิธีการสร้างและใช้งาน GraphQL API เราจะไม่ให้ข้อมูลเบื้องต้นเกี่ยวกับ GraphQL โดยละเอียด เหตุผลนั้นง่ายมาก เนื่องจากทีม GraphQL ได้จัดเตรียมเอกสารที่ครอบคลุมและแสดงรายการแนวทางปฏิบัติที่ดีที่สุดหลายประการในบทนำสู่ GraphQL
แบบสอบถาม GraphQL คืออะไร?
ตามที่อธิบายไว้ก่อนหน้านี้ การสืบค้นเป็นวิธีที่ไคลเอ็นต์สามารถอ่านและจัดการข้อมูลจาก API ได้ คุณสามารถส่งประเภทของออบเจ็กต์และเลือกชนิดของฟิลด์ที่คุณต้องการรับกลับได้ แบบสอบถามง่ายๆจะเป็นดังนี้:
query{ users{ firstName, lastName } }
ในข้อความค้นหานี้ เรากำลังพยายามเข้าถึงผู้ใช้ทั้งหมดจากสคีมาของผู้ใช้ของเรา แต่ได้รับ firstName
ชื่อและ lastName
เท่านั้น ผลลัพธ์ของแบบสอบถามนี้จะเป็นเช่น:
{ "data": { "users": [ { "firstName": "Marcos", "lastName": "Silva" }, { "firstName": "Paulo", "lastName": "Silva" } ] } }
มันค่อนข้างง่ายสำหรับการใช้งานไคลเอนต์
จุดประสงค์ของการใช้ GraphQL API คืออะไร?
วัตถุประสงค์ของการสร้าง API คือความสามารถในการมีซอฟต์แวร์เป็นบริการที่สามารถรวมเข้ากับบริการภายนอกอื่นๆ แม้ว่าแอปพลิเคชันของคุณจะถูกใช้โดยฟรอนต์เอนด์เดียว คุณสามารถพิจารณาว่าฟรอนต์เอนด์นี้เป็นบริการภายนอก และสำหรับสิ่งนั้น คุณจะสามารถทำงานในโปรเจ็กต์ต่างๆ ได้เมื่อมีการสื่อสารระหว่างทั้งสองผ่าน API
หากคุณทำงานในทีมขนาดใหญ่ ก็สามารถแยกกันเพื่อสร้างทีม front-end และ back-end ได้ ซึ่งช่วยให้ทั้งสองใช้เทคโนโลยีเดียวกันและทำให้งานของพวกเขาง่ายขึ้น เมื่อสร้างสถาปัตยกรรม API สิ่งสำคัญคือต้องเลือกสิ่งที่เหมาะสมกว่าสำหรับโครงการและสิ่งที่ทำให้คุณเข้าใกล้โซลูชันที่คุณต้องการมากขึ้น
ในบทความนี้ เราจะเน้นที่โครงร่างสำหรับสร้าง API ที่ใช้ GraphQL
GraphQL ดีกว่า REST หรือไม่?
มันอาจจะดูยุ่งยากไปหน่อย แต่ฉันช่วยไม่ได้ นั่นขึ้นอยู่กับ
GraphQL เป็นแนวทางที่เหมาะกับหลาย ๆ สถานการณ์ได้เป็นอย่างดี REST เป็นแนวทางสถาปัตยกรรมที่ได้รับการพิสูจน์แล้วในหลายสถานการณ์เช่นกัน ปัจจุบัน มีบทความมากมายที่อธิบายว่าทำไมบทความหนึ่งจึงดีกว่าบทความอื่น หรือเหตุใดคุณจึงควรใช้เฉพาะ REST แทน GraphQL และยังมีอีกหลายวิธีที่คุณสามารถใช้งาน GraphQL ภายในและยังคงรักษาปลายทางของ API ให้เป็นสถาปัตยกรรมแบบ REST
คำแนะนำที่ดีที่สุดคือการรู้ถึงประโยชน์ของแต่ละแนวทาง วิเคราะห์โซลูชันที่คุณกำลังสร้าง ประเมินว่าทีมของคุณทำงานได้อย่างสบายใจกับโซลูชันเพียงใด และประเมินว่าคุณจะสามารถแนะนำทีมของคุณเพื่อเรียนรู้และลุกขึ้นได้หรือไม่ ความเร็วอย่างรวดเร็วก่อนที่จะเลือกระหว่างวิธีการ
บทความนี้เป็นแนวทางปฏิบัติมากกว่าการเปรียบเทียบเชิงอัตนัยของ GraphQL และ REST ในกรณีที่คุณต้องการอ่านการเปรียบเทียบโดยละเอียดของทั้งสอง เราขอแนะนำให้คุณอ่านบทความอื่นของเรา GraphQL vs. REST - บทช่วยสอน GraphQL
ในบทความของวันนี้ เราจะเน้นที่การสร้าง GraphQL API โดยใช้ Node.js
ทำไมเราใช้ Node.js?
GraphQL มีไลบรารี่ต่างๆ มากมายที่คุณสามารถใช้ได้ สำหรับวัตถุประสงค์ของบทความนี้ เราตัดสินใจที่จะใช้แนวคิดในการใช้ JavaScript กับ Node.js เนื่องจากมีการใช้งานอย่างแพร่หลาย และข้อเท็จจริงที่ว่า Node.js ช่วยให้นักพัฒนาสามารถใช้ไวยากรณ์ส่วนหน้าที่คุ้นเคยสำหรับการพัฒนาฝั่งเซิร์ฟเวอร์
นอกจากนี้ยังเป็นประโยชน์ในการเปรียบเทียบกับแนวทางของเรากับ API แบบ REST ซึ่งคล้ายกับที่แสดงในบทความบล็อกวิศวกรรม Toptal อื่น: การสร้าง API ของ REST ที่ปลอดภัยใน Node.js บทความนี้ยังแสดงการใช้ Node.js กับ Express เพื่อพัฒนา REST API โครงกระดูก ซึ่งจะช่วยให้คุณเปรียบเทียบความแตกต่างระหว่างสองวิธีนี้ได้ Node.js ยังได้รับการออกแบบด้วยแอปพลิเคชันเครือข่ายที่ปรับขนาดได้ ชุมชนทั่วโลก และไลบรารีโอเพนซอร์ซต่างๆ ที่คุณสามารถพบได้ที่เว็บไซต์ npm
คราวนี้เราจะแสดงวิธีสร้าง API โครงกระดูกด้วย GraphQL, Node.js และ Express!
ลงมือทำ GraphQL Tutorial
ตามที่สรุปไว้ก่อนหน้านี้ เราจะสร้างแนวคิดโครงกระดูกสำหรับ GraphQL API และคุณจำเป็นต้องรู้พื้นฐานของ Node.js และ Express ก่อนดำเนินการต่อ ซอร์สโค้ดของโครงการที่สร้างขึ้นสำหรับตัวอย่าง GraphQL นี้มีอยู่ที่นี่
เราจะจัดการกับทรัพยากรสองประเภท:
- ผู้ใช้ ซึ่งเราจะจัดการกับ CRUD พื้นฐาน
- ผลิตภัณฑ์ ซึ่งเราจะมีรายละเอียดเล็กน้อยเพื่อแสดงพลังของ GraphQL เพิ่มเติม
ผู้ใช้จะมีโครงสร้างดังต่อไปนี้:
- id
- ชื่อจริง
- นามสกุล
- อีเมล
- รหัสผ่าน
- ระดับการอนุญาต
ผลิตภัณฑ์จะมีโครงสร้างดังต่อไปนี้:
- id
- ชื่อ
- คำอธิบาย
- ราคา
สำหรับมาตรฐานการเข้ารหัส เราจะใช้ TypeScript สำหรับโครงการนี้ ในไฟล์ต้นฉบับ คุณจะสามารถกำหนดค่าทุกอย่างเพื่อเริ่มเขียนโค้ดด้วย TypeScript
มาโค้ดกันเถอะ!
ก่อนอื่น ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Node.js เวอร์ชันล่าสุดแล้ว ในขณะที่เผยแพร่ เวอร์ชันปัจจุบันคือ 10.15.3 ตาม Nodejs.org
การเริ่มต้นโครงการ
มาเริ่มกันที่โฟลเดอร์ใหม่ที่เราตั้งชื่อได้ node-graphql
ที่นั่น เราสามารถเปิดเทอร์มินัลหรือคอนโซล Git CLI และเริ่มต้นเวทย์มนตร์โดยใช้คำสั่งต่อไปนี้: npm init
การกำหนดค่าการพึ่งพาและ TypeScript . ของเรา
เพื่อเพิ่มความเร็วในกระบวนการ แทนที่ package.json
ของคุณด้วยสิ่งต่อไปนี้ที่ที่เก็บ Git ของเราควรมีการพึ่งพาที่จำเป็นทั้งหมด:
{ "name": "node-graphql", "version": "1.0.0", "description": "", "main": "dist/index.js", "scripts": { "tsc": "tsc", "start": "npm run tsc && node ./build/app.js" }, "author": "", "license": "ISC", "dependencies": { "@types/express": "^4.16.1", "@types/express-graphql": "^0.6.2", "@types/graphql": "^14.0.7", "express": "^4.16.4", "express-graphql": "^0.7.1", "graphql": "^14.1.1", "graphql-tools": "^4.0.4" }, "devDependencies": { "tslint": "^5.14.0", "typescript": "^3.3.4000" } }
ด้วยการอัพเดต package.json
เพียงแค่กดเทอร์มินัลอีกครั้งและใช้: npm install
มันจะติดตั้งการพึ่งพาทั้งหมดที่จำเป็นในการเรียกใช้ GraphQL API นี้ภายใน Node.js และ Express
ส่วนต่อไปคือการกำหนดค่าโหมด TypeScript ของเรา เราต้องการไฟล์ชื่อ tsconfig.json
ในโฟลเดอร์รูทของเรา โดยมีรายละเอียดดังนี้:
{ "compilerOptions": { "target": "ES2016", "module": "commonjs", "outDir": "./build", "strict": true, "esModuleInterop": true } }
ตรรกะของรหัสสำหรับการกำหนดค่านี้จะอยู่ที่โฟลเดอร์แอป ที่นั่น เราสามารถสร้างไฟล์ app.ts
และสำหรับการทดสอบพื้นฐาน ให้เพิ่มโค้ดต่อไปนี้ที่นั่น:
console.log('Hello Graphql Node API tutorial');
จากการกำหนดค่าของเรา ตอนนี้เราสามารถเรียกใช้ npm start
และรอบิลด์ และสามารถทดสอบว่าทุกอย่างทำงานอย่างถูกต้อง ในคอนโซลเทอร์มินัลของคุณ คุณควรเห็น “บทช่วยสอน Hello GraphQL Node API” ของเรา ในเบื้องหลัง การกำหนดค่าโดยทั่วไปจะรวบรวมโค้ด build
เป็น JavaScript ล้วนๆ จากนั้นจึงเรียกใช้งานบิลด์ของเราในโฟลเดอร์บิลด์
ตอนนี้ มากำหนดค่าโครงร่างพื้นฐานสำหรับ GraphQL API ของเรา สำหรับการเริ่มต้นโครงการ เราจะเพิ่มการนำเข้าพื้นฐานสามรายการ:
- ด่วน
- Express-graphql
- เครื่องมือ Graphql
มาเริ่มกันเลยดีกว่า:

import express from 'express'; import graphqlHTTP from 'express-graphql'; import {makeExecutableSchema} from 'graphql-tools';
ตอนนี้เราควรจะเริ่มเขียนโค้ดได้แล้ว ขั้นตอนต่อไปคือจัดการกับแอปของเราใน Express และการกำหนดค่า GraphQL พื้นฐาน เช่น:
import express from 'express'; import graphqlHTTP from 'express-graphql'; import {makeExecutableSchema} from 'graphql-tools'; const app: express.Application = express(); const port = 3000; let typeDefs: any = [` type Query { hello: String } type Mutation { hello(message: String) : String } `]; let helloMessage: String = 'World!'; let resolvers = { Query: { hello: () => helloMessage }, Mutation: { hello: (_: any, helloData: any) => { helloMessage = helloData.message; return helloMessage; } } }; app.use( '/graphql', graphqlHTTP({ schema: makeExecutableSchema({typeDefs, resolvers}), graphiql: true }) ); app.listen(port, () => console.log(`Node Graphql API listening on port ${port}!`));
สิ่งที่เรากำลังทำคือ:
- เปิดใช้งานพอร์ต 3000 สำหรับแอปเซิร์ฟเวอร์ Express ของเรา
- การกำหนดข้อความค้นหาและการกลายพันธุ์ที่เราต้องการใช้เป็นตัวอย่างด่วน
- กำหนดวิธีการทำงานของคิวรีและการกลายพันธุ์
ตกลง แต่เกิดอะไรขึ้นสำหรับ typeDefs และตัวแก้ไข รวมถึงความสัมพันธ์กับข้อความค้นหาและการกลายพันธุ์
- typeDefs - คำจำกัดความของสคีมาของสิ่งที่เราคาดหวังได้จากข้อความค้นหาและการกลายพันธุ์
- ตัว แก้ไข - แทนที่จะเป็นความคาดหวังของฟิลด์หรือพารามิเตอร์ที่จำเป็น ในที่นี้เราจะกำหนดฟังก์ชันและพฤติกรรมว่าการสืบค้นและการกลายพันธุ์ควรทำงานอย่างไร
- แบบสอบถาม - "ได้รับ" ที่เราต้องการอ่านจากเซิร์ฟเวอร์
- การกลายพันธุ์ - คำขอของเราที่จะส่งผลต่อข้อมูลใดๆ ที่เรามีบนเซิร์ฟเวอร์ของเราเอง
ตอนนี้ ให้เรียกใช้ npm start อีกครั้งเพื่อดูว่ามีอะไรบ้าง เราคาดว่าแอปจะทำงานด้วยข้อความต่อไปนี้: Node Graphql API กำลังฟังบนพอร์ต 3000!
ตอนนี้เราสามารถลองสืบค้นและทดสอบ GraphQL API บนเซิร์ฟเวอร์ของเราเองได้ทาง: http://localhost:3000/graphql
เยี่ยมมาก ตอนนี้เราสามารถเขียนคำถามแรกของเราเองซึ่งถูกกำหนดเป็น "สวัสดี"
โปรดทราบว่าวิธีที่เรากำหนดไว้ที่ typeDefs
หน้าสามารถช่วยเราสร้างแบบสอบถามได้
ดีมาก แต่เราจะเปลี่ยนค่าได้อย่างไร? กลายพันธุ์!
ตอนนี้ มาดูกันว่าจะเกิดอะไรขึ้นเมื่อเราเปลี่ยนค่าในหน่วยความจำด้วยการกลายพันธุ์:
ตอนนี้ เราสามารถดำเนินการ CRUD พื้นฐานด้วย GraphQL Node.js API ของเราได้แล้ว ไปข้างหน้าด้วยรหัสของเราตอนนี้
สินค้า
สำหรับผลิตภัณฑ์ เราจะใช้โมดูลที่เรียกว่าผลิตภัณฑ์ เพื่อลดความซับซ้อนของบทความนี้ เราจะใช้ฐานข้อมูลในหน่วยความจำเพื่อการสาธิตเท่านั้น เราจะกำหนดรูปแบบและบริการเพื่อจัดการผลิตภัณฑ์
โมเดลของเราจะขึ้นอยู่กับดังนี้:
export class Product { private id: Number = 0; private name: String = ''; private description: String = ''; private price: Number = 0; constructor(productId: Number, productName: String, productDescription: String, price: Number) { this.id = productId; this.name = productName; this.description = productDescription; this.price = price; } }
บริการที่จะสื่อสารกับ GraphQL จะถูกกำหนดเป็น:
export class ProductsService { public products: any = []; configTypeDefs() { let typeDefs = ` type Product { name: String, description: String, id: Int, price: Int } `; typeDefs += ` extend type Query { products: [Product] } `; typeDefs += ` extend type Mutation { product(name:String, id:Int, description: String, price: Int): Product! }`; return typeDefs; } configResolvers(resolvers: any) { resolvers.Query.products = () => { return this.products; }; resolvers.Mutation.product = (_: any, product: any) => { this.products.push(product); return product; }; } }
ผู้ใช้
สำหรับผู้ใช้ เราจะใช้โครงสร้างเดียวกับโมดูลผลิตภัณฑ์ เราจะมีรูปแบบและบริการสำหรับผู้ใช้ โมเดลจะถูกกำหนดเป็น:
export class User { private id: Number = 0; private firstName: String = ''; private lastName: String = ''; private email: String = ''; private password: String = ''; private permissionLevel: Number = 1; constructor(id: Number, firstName: String, lastName: String, email: String, password: String, permissionLevel: Number) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.email = email; this.password = password; this.permissionLevel = permissionLevel; } }
ในขณะเดียวกัน บริการของเราจะมีลักษณะดังนี้:
const crypto = require('crypto'); export class UsersService { public users: any = []; configTypeDefs() { let typeDefs = ` type User { firstName: String, lastName: String, id: Int, password: String, permissionLevel: Int, email: String } `; typeDefs += ` extend type Query { users: [User] } `; typeDefs += ` extend type Mutation { user(firstName:String, lastName: String, password: String, permissionLevel: Int, email: String, id:Int): User! }`; return typeDefs; } configResolvers(resolvers: any) { resolvers.Query.users = () => { return this.users; }; resolvers.Mutation.user = (_: any, user: any) => { let salt = crypto.randomBytes(16).toString('base64'); let hash = crypto.createHmac('sha512', salt).update(user.password).digest("base64"); user.password = hash; this.users.push(user); return user; }; } }
เพื่อเป็นการเตือนความจำ รหัสที่มาสามารถใช้ได้จากลิงค์นี้
ตอนนี้เราสามารถเล่นและทดสอบโค้ดของเราได้แล้ว มาเริ่มกันเลย npm start
เราจะให้เซิร์ฟเวอร์ทำงานที่พอร์ต 3000 ตอนนี้เราสามารถเข้าถึง GraphQL เพื่อทดสอบได้ที่ http://localhost:3000/graphql
ลองใช้การกลายพันธุ์เพื่อเพิ่มรายการในรายการผลิตภัณฑ์ของเรา:
เพื่อทดสอบว่าใช้งานได้หรือไม่ ตอนนี้เราจะใช้แบบสอบถามสำหรับผลิตภัณฑ์ แต่รับเฉพาะ id
name
และ price
:
query{ products{ id, name, price } } The response will be: { "data": { "products": [ { "id": 100, "name": "My amazing product", "price": 400 } ] } }
และนั่นคือมัน; ผลิตภัณฑ์ทำงานได้ตามที่คาดไว้ ตอนนี้เราสามารถเล่นและเปลี่ยนสนามได้ถ้าต้องการ คุณสามารถลองเพิ่มคำอธิบาย:
query{ products{ id, name, description, price } }
ตอนนี้เราสามารถมีคำอธิบายผลิตภัณฑ์ของเราได้แล้ว มาลองใช้ผู้ใช้กันเลย
mutation{ user(id:200, firstName:"Marcos", lastName:"Silva", password:"amaz1ingP4ss", permissionLevel:9, email:"[email protected]") { id } }
และคำถามจะเป็นเช่น:
query{ users{ id, firstName, lastName, password, email } }
ด้วยการตอบสนองเช่น:
{ "data": { "users": [ { "id": 200, "firstName": "Marcos", "lastName": "Silva", "password": "kpj6Mq0tGChGbZ+BT9Nw6RMCLReZEPPyBCaUS3X23lZwCCp1Ogb94/oqJlya0xOBdgEbUwqRSuZRjZGhCzLdeQ==", "email": "[email protected]" } ] } }
และตอนนี้โครงกระดูก GraphQL ของเราก็พร้อมแล้ว! จากนี้ไปมีขั้นตอนมากมายที่มุ่งไปสู่ API ที่มีประโยชน์และทำงานได้อย่างสมบูรณ์ แต่ตอนนี้แกนหลักได้รับการตั้งค่าแล้ว
สรุปและความคิดสุดท้าย
แม้จะตัดขอบให้สั้นลง บทความก็ค่อนข้างใหญ่พร้อมข้อมูลพื้นฐานมากมายเกี่ยวกับการพัฒนา GraphQL Node.js API
มาทบทวนสิ่งที่เราได้กล่าวถึงไปแล้ว:
- การใช้ Node.js กับ Express และ GraphQL เพื่อสร้าง GraphQL API
- การใช้ GraphQL ขั้นพื้นฐาน
- การใช้เคียวรีและการกลายพันธุ์เบื้องต้น
- แนวทางพื้นฐานในการสร้างโมดูลสำหรับโครงการของคุณ
- ทดสอบ GraphQL API ของเรา
เพื่อเน้นด้านการพัฒนาของสิ่งต่าง ๆ มากขึ้น เราได้หลีกเลี่ยงประเด็นสำคัญหลายประการที่สามารถสรุปสั้น ๆ ได้ดังนี้:
- การตรวจสอบสำหรับรายการใหม่
- การจัดการข้อผิดพลาดอย่างถูกต้องด้วยบริการข้อผิดพลาดทั่วไป
- การตรวจสอบความถูกต้องของฟิลด์ที่ผู้ใช้สามารถใช้ได้ในแต่ละคำขอด้วยบริการทั่วไป
- เพิ่มตัวสกัดกั้น JWT เพื่อรักษาความปลอดภัย API
- จัดการแฮชรหัสผ่านด้วยวิธีการที่มีประสิทธิภาพมากขึ้น
- เพิ่มหน่วยและการทดสอบการรวม;
จำไว้ว่าเรามีซอร์สโค้ดแบบเต็มที่ลิงค์ Git นี้ ใช้งาน แยกประเด็น เปิดประเด็น ดึงคำขอ และเล่นกับมันได้ตามสบาย! โปรดทราบว่ามาตรฐานและข้อเสนอแนะทั้งหมดที่จัดทำในบทความนี้ไม่ได้แกะสลักด้วยหิน
นี่เป็นเพียงหนึ่งในหลายแนวทางที่สามารถใช้เพื่อเริ่มออกแบบ GraphQL API ของคุณเอง นอกจากนี้ อย่าลืมอ่านและสำรวจ GraphQL โดยละเอียดยิ่งขึ้น เรียนรู้ว่ามีอะไรให้บ้างและจะทำให้ API ของคุณดียิ่งขึ้นได้อย่างไร