Graphql vs Rest Api Programming

Graphql vs Rest Api

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

GraphQL vs REST API: มวยคู่เอกแห่งโลก API ทำไมถึงต้องรู้?

น้องๆ เคยเจอปัญหาไหม? เรียกข้อมูลจาก API มาเพียบ แต่ใช้จริงแค่ 2-3 ช่อง ที่เหลือคือ "ขยะ" เต็ม bandwidth ไปหมด สมัยผมทำร้านเน็ต bandwidth มันแพงนะเฟ้ย! ทุก byte มีค่า GraphQL เลยเข้ามาเป็นพระเอกขี่ม้าขาว (หรือเปล่า?) มาดูกันว่ามันต่างจาก REST API ยังไง และทำไมเราต้องสนใจมัน

REST API เนี่ย เหมือนเราสั่งอาหารตามเมนูเป๊ะๆ อยากกินอะไรก็สั่งตามนั้น แต่ GraphQL เหมือนเราบอกเชฟว่า "ขอข้าวผัด ใส่หมู ไม่ใส่ผักชี เพิ่มไข่ดาว" คือเจาะจงได้ตามใจชอบเลย

พื้นฐานที่ต้องรู้ก่อนบู๊

ก่อนจะลงสังเวียน GraphQL vs REST API เราต้องมีพื้นฐานกันก่อนนะน้อง

REST API: สุภาพบุรุษรุ่นเก๋า

REST (Representational State Transfer) เนี่ย เป็น architecture style ที่ใช้กันมานานนม หลักๆ คือ Client ส่ง Request ไปหา Server, Server ก็ Return Response กลับมา โดยใช้ HTTP verbs (GET, POST, PUT, DELETE) เป็นตัวจัดการ

ยกตัวอย่างง่ายๆ: อยากได้ข้อมูล user id 123 ก็ GET ไปที่ /users/123 Server ก็ส่งข้อมูล user นั้นกลับมาให้

GraphQL: หนุ่มไฟแรงแห่งยุค

GraphQL สร้างโดย Facebook (พี่มาร์คแกชอบสร้างอะไรใหม่ๆ) มันเป็น Query Language สำหรับ API คือเราจะ query อะไรก็ได้ตาม schema ที่กำหนดไว้

ที่สำคัญคือ GraphQL แก้ปัญหา Over-fetching (ได้ข้อมูลมาเกิน) และ Under-fetching (ได้ข้อมูลไม่พอ) ได้อย่างดี

Schema: พิมพ์เขียวของ GraphQL

Schema ใน GraphQL คือตัวกำหนดว่าเราสามารถ query อะไรได้บ้าง มี fields อะไรบ้าง และแต่ละ field มี type อะไรบ้าง เปรียบเหมือนพิมพ์เขียวบ้าน ถ้าไม่มีพิมพ์เขียว ช่างก็สร้างบ้านไม่ได้

Schema เขียนด้วย Schema Definition Language (SDL) ซึ่งเข้าใจง่ายมากๆ

วิธีใช้งาน GraphQL และ REST API เริ่มต้นยังไง?

มาดูวิธีใช้งานของแต่ละตัวกันบ้าง เริ่มจาก REST ก่อนเลย

REST API: ง่ายแต่ต้องระวัง

REST API เนี่ยง่ายตรงที่เราใช้ HTTP verbs ได้เลย แต่ต้องออกแบบ API endpoints ให้ดี ไม่งั้นจะมั่วซั่วไปหมด

ตัวอย่าง code (Node.js + Express):


const express = require('express');
const app = express();

app.get('/users/:id', (req, res) => {
  const userId = req.params.id;
  // ดึงข้อมูล user จาก database
  const user = { id: userId, name: 'John Doe', email: 'john.doe@example.com' };
  res.json(user);
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

อันนี้คือ endpoint ง่ายๆ สำหรับดึงข้อมูล user ตาม id

GraphQL: พลังอยู่ที่ Query

GraphQL ซับซ้อนกว่า REST นิดหน่อย แต่ยืดหยุ่นกว่าเยอะ เราต้อง define schema ก่อน แล้วค่อยเขียน resolvers เพื่อดึงข้อมูล

ตัวอย่าง code (Node.js + Apollo Server):


const { ApolloServer, gql } = require('apollo-server');

// Define schema
const typeDefs = gql`
  type User {
    id: ID!
    name: String!
    email: String
  }

  type Query {
    user(id: ID!): User
  }
`;

// Define resolvers
const resolvers = {
  Query: {
    user: (parent, args, context) => {
      const userId = args.id;
      // ดึงข้อมูล user จาก database
      return { id: userId, name: 'John Doe', email: 'john.doe@example.com' };
    },
  },
};

// Create Apollo Server
const server = new ApolloServer({ typeDefs, resolvers });

// Start the server
server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});

อันนี้คือ server GraphQL ง่ายๆ ที่มี query สำหรับดึงข้อมูล user ตาม id

ขั้นตอนปฏิบัติจริง: ลุยกันเลย!

มาลองทำตามขั้นตอนง่ายๆ กัน

REST API: สร้าง API endpoint ง่ายๆ

  1. ติดตั้ง Node.js และ npm (Node Package Manager)
  2. สร้าง project ใหม่: mkdir my-rest-api && cd my-rest-api
  3. ติดตั้ง express: npm install express
  4. สร้าง file index.js แล้วใส่ code ตัวอย่างข้างบน
  5. Run server: node index.js

GraphQL: สร้าง GraphQL server ง่ายๆ

  1. ติดตั้ง Node.js และ npm
  2. สร้าง project ใหม่: mkdir my-graphql-api && cd my-graphql-api
  3. ติดตั้ง Apollo Server: npm install apollo-server graphql
  4. สร้าง file index.js แล้วใส่ code ตัวอย่างข้างบน
  5. Run server: node index.js

ทดสอบ API

REST API: ใช้ Postman หรือ curl ก็ได้ GET ไปที่ http://localhost:3000/users/123

GraphQL: เข้าไปที่ GraphQL Playground (ปกติจะอยู่ที่ http://localhost:4000) แล้วเขียน query:


query {
  user(id: "123") {
    id
    name
    email
  }
}

เปรียบเทียบ GraphQL กับทางเลือกอื่น

นอกจาก REST API แล้ว ยังมีทางเลือกอื่นอีกไหม? ตอบ: มีแน่นอน!

แต่ REST API กับ GraphQL ถือเป็นตัวเลือกหลักๆ ที่ใช้กันเยอะที่สุดในปัจจุบัน

มาดูตารางเปรียบเทียบกันชัดๆ:

Feature REST API GraphQL
Over-fetching/Under-fetching มีปัญหา แก้ปัญหาได้
Schema ไม่มี มี
Versioning ต้องจัดการเอง ไม่ต้อง version
Caching HTTP caching ซับซ้อนกว่า
Complexity ง่ายกว่า ซับซ้อนกว่า
Developer Experience แล้วแต่ design ดีกว่า

เห็นไหมว่า GraphQL มีข้อดีหลายอย่าง แต่ก็ไม่ได้แปลว่า REST API ไม่ดีนะ มันขึ้นอยู่กับ use case ของเรามากกว่า

ถ้าโปรเจคเล็กๆ ไม่ซับซ้อน REST API ก็ยังเป็นตัวเลือกที่ดี แต่ถ้าโปรเจคใหญ่ๆ มี data เยอะ GraphQL อาจจะตอบโจทย์กว่า

สมัยผมทำ SiamCafe Blog ผมใช้ REST API เพราะมันง่ายดี แต่ถ้าให้เริ่มใหม่ตอนนี้ อาจจะลอง GraphQL ดูบ้าง

สุดท้ายแล้ว ไม่มีอะไรดีที่สุดในทุกกรณี ลองศึกษาดู แล้วเลือกสิ่งที่เหมาะกับเราที่สุดนะน้องๆ

อย่าลืมแวะไปอ่านบทความอื่นๆ ใน SiamCafe Blog นะ มีอะไรดีๆ อีกเยอะเลย

🎬 วิดีโอแนะนำ

ดูวิดีโอเพิ่มเติมเกี่ยวกับGraphql vs Rest Api:

Best Practices / เคล็ดลับจากประสบการณ์

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

3-4 เทคนิคที่ใช้ได้จริง

1. เลือกใช้ให้ถูกงาน: อันนี้สำคัญสุดๆ ไม่ใช่ว่า GraphQL จะดีกว่า REST API เสมอไปนะ มันขึ้นอยู่กับ use case ของเรามากกว่า ถ้าโปรเจกต์เล็กๆ API ไม่ซับซ้อน REST API นี่แหละจบไวสุดแล้ว แต่ถ้า API ซับซ้อน มี client หลายแบบ GraphQL จะช่วยลดภาระงานได้เยอะ

สมัยผมทำร้านเน็ตฯ REST API นี่แหละตอบโจทย์ เพราะข้อมูลไม่ได้เยอะซับซ้อนอะไรมาก แค่จัดการ user, เกม, billing แต่ถ้าเป็นโปรเจกต์ใหญ่ๆ ที่มีข้อมูลเยอะๆ เช่น ระบบจัดการคลังสินค้า หรือระบบ e-commerce ที่มี client หลายแบบ GraphQL จะเวิร์คกว่า

2. Caching is your friend: ไม่ว่าจะ GraphQL หรือ REST API Caching ช่วยลดภาระ server ได้เยอะมากๆ ยิ่งถ้าข้อมูลมีการเปลี่ยนแปลงไม่บ่อย การทำ caching จะช่วยให้ API เร็วขึ้นหลายเท่าตัว

ผมเคยเจอเคสที่ API ช้ามากๆ เพราะ query ข้อมูลจาก database ทุกครั้งที่ request เข้ามา พอใส่ caching เข้าไปเท่านั้นแหละ เร็วปรื๊ดเลย ลองใช้ Redis หรือ Memcached ดูนะ ง่ายและ effective มาก

3. Versioning is a must: ไม่ว่าจะ GraphQL หรือ REST API การทำ versioning สำคัญมากๆ เพราะ API มีการเปลี่ยนแปลงตลอดเวลา ถ้าไม่มี versioning client ที่ใช้ API เวอร์ชั่นเก่าอาจจะพังได้

สำหรับ REST API ก็ใช้ versioning ใน URL ไปเลยง่ายสุด เช่น /api/v1/users สำหรับ GraphQL ก็ใช้ schema versioning ได้ หรือจะใช้ namespace ก็ได้ แล้วแต่ความถนัดเลย

4. Monitor & Log: อันนี้สำคัญมาก อย่าปล่อยให้ API ทำงานไปเรื่อยๆ โดยไม่รู้ว่าเกิดอะไรขึ้น ต้อง monitor API performance และ log error อย่างละเอียด เพื่อให้เราสามารถแก้ไขปัญหาได้ทันท่วงที

ผมแนะนำให้ใช้ tools อย่าง Prometheus, Grafana, ELK stack พวกนี้ช่วยให้เราเห็นภาพรวมของ API ได้ชัดเจนมากๆ

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

GraphQL เหมาะกับงานประเภทไหน?

GraphQL เหมาะกับงานที่ต้องการความยืดหยุ่นสูง มี client หลายแบบ และต้องการดึงข้อมูลเฉพาะที่จำเป็นเท่านั้น เช่น mobile app, single page application (SPA) หรือ API ที่ต้องรองรับ client ที่มีความต้องการข้อมูลแตกต่างกัน

REST API เหมาะกับงานประเภทไหน?

REST API เหมาะกับงานที่ไม่ซับซ้อน มี client ไม่เยอะ และต้องการความเรียบง่ายในการพัฒนา เช่น API สำหรับเว็บแอปพลิเคชันทั่วไป หรือ API ที่ต้องการความเข้ากันได้กับระบบเดิม

GraphQL ยากกว่า REST API จริงหรือ?

GraphQL มี learning curve ที่สูงกว่า REST API จริง แต่เมื่อเข้าใจ concept แล้ว GraphQL จะช่วยลดภาระงานได้เยอะ โดยเฉพาะอย่างยิ่งในโปรเจกต์ที่มี API ซับซ้อน

ควรเลือกใช้ tools อะไรในการพัฒนา GraphQL API?

มี tools ให้เลือกใช้เยอะมาก ขึ้นอยู่กับภาษาที่เราถนัด ถ้า JavaScript ก็ลองใช้ Apollo Server หรือ Express GraphQL ถ้า Python ก็ลองใช้ Graphene หรือ Ariadne

สรุป

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

อย่าลืมไปเยี่ยมชม iCafeForex นะครับ เผื่อใครสนใจเรื่อง Forex

และอย่าลืมติดตาม SiamCafe Blog ด้วยนะครับ มีบทความดีๆ อีกเยอะเลย