12/04/2026 18:18น.

EP.33 การใช้ GraphQL กับ WebSocket ใน Go เพื่อสร้าง API แบบเรียลไทม์
#Go Programming
#API Development
#WebSocket API
#GraphQL API
#Real-Time API
#GraphQL Subscriptions
#Golang
#Go
#WebSocket
#GraphQL
GraphQL และ WebSocket – ทำไมต้องใช้ร่วมกัน?
GraphQL เป็น API Query Language ที่ให้ไคลเอนต์สามารถดึงข้อมูลเฉพาะส่วนที่ต้องการได้ WebSocket เป็นโปรโตคอลที่ช่วยให้ระบบสามารถสื่อสารแบบ Full-Duplex หรือ Real-Time ได้ เมื่อรวมกัน เราจะสามารถสร้าง API ที่รองรับการอัปเดตข้อมูลได้แบบเรียลไทม์ โดยใช้ GraphQL Subscriptions
การใช้งาน GraphQL Subscriptions กับ WebSocket
GraphQL Subscriptions อนุญาตให้ไคลเอนต์ "ติดตาม" ข้อมูลที่ต้องการ เมื่อมีการเปลี่ยนแปลง เซิร์ฟเวอร์จะส่งข้อมูลที่อัปเดตกลับไปให้ไคลเอนต์โดยอัตโนมัติ
ตัวอย่าง GraphQL Subscription:
subscription {
newMessage {
id
content
sender
}
}เมื่อมีข้อความใหม่ (newMessage), เซิร์ฟเวอร์จะส่งข้อมูลกลับมายังไคลเอนต์แบบ Real-Time
ตัวอย่างโค้ดการใช้งาน WebSocket กับ GraphQL ใน Go
1. การติดตั้งไลบรารีที่จำเป็น
go get github.com/99designs/gqlgen
go get github.com/gorilla/websocket2. สร้าง Schema สำหรับ GraphQL
ไฟล์ schema.graphql
type Query {
messages: [Message!]!
}
type Subscription {
messageAdded: Message!
}
type Message {
id: ID!
content: String!
sender: String!
}3. สร้าง Resolver สำหรับ GraphQL
ไฟล์ resolver.go
package main
import (
"context"
"fmt"
"sync"
)
type Message struct {
ID string
Content string
Sender string
}
type Resolver struct {
mu sync.Mutex
messages []Message
subscribers map[string]chan Message
}
func NewResolver() *Resolver {
return &Resolver{
messages: []Message{},
subscribers: make(map[string]chan Message),
}
}
func (r *Resolver) Subscription_messageAdded(ctx context.Context) (<-chan Message, error) {
id := fmt.Sprintf("%d", len(r.subscribers))
r.mu.Lock()
ch := make(chan Message)
r.subscribers[id] = ch
r.mu.Unlock()
go func() {
<-ctx.Done()
r.mu.Lock()
delete(r.subscribers, id)
close(ch)
r.mu.Unlock()
}()
return ch, nil
}ท้าให้ลอง!
ลองสร้างระบบแจ้งเตือนแบบเรียลไทม์ที่ใช้ GraphQL Subscriptions และ WebSocket เพื่อแจ้งเตือนผู้ใช้เมื่อมีข้อความใหม่!
EP ถัดไป
ใน EP.34 เราจะมาดูการสร้างระบบแชทที่สมบูรณ์แบบโดยใช้ GraphQL และ WebSocket เพื่อให้รองรับการสนทนาแบบเรียลไทม์! เตรียมตัวให้พร้อม 🚀