อัปเดตค่าเงินบาทแบบเรียลไทม์ด้วย Spring Boot + SSE + Frankfurter API
🔎 Frankfurter คืออะไร?
Frankfurter.app
เป็นบริการ ฟรี ที่ให้ข้อมูล อัตราแลกเปลี่ยนสกุลเงินรายวัน (Exchange Rates)
โดยดึงข้อมูลจาก ธนาคารกลางยุโรป (European Central Bank)
จุดเด่นคือ:
✅ ใช้งานฟรี ไม่ต้องสมัคร ไม่ต้องมี API key
✅ รองรับหลายสกุลเงิน เช่น USD, THB, EUR, JPY
✅ ได้ข้อมูลในรูปแบบ JSON อ่านง่าย
✅ เหมาะสำหรับการทดสอบ หรือทำโปรเจกต์สาธิต
ตัวอย่างการเรียก API:
ผลลัพธ์ที่ได้:
หมายความว่า “1 ดอลลาร์สหรัฐ (USD) = 36.74 บาท (THB)”
🧭 เป้าหมายของเรา
เราจะสร้างเว็บเล็ก ๆ ที่ แสดงค่าเงินบาทแบบเรียลไทม์
โดยไม่ต้องกด refresh เอง
แนวคิดคือใช้เทคโนโลยีที่ชื่อว่า SSE (Server-Sent Events)
ซึ่งจะให้ฝั่ง Server ส่งข้อมูลใหม่มาที่หน้าเว็บโดยอัตโนมัติ
⚙️ เครื่องมือที่ใช้
เครื่องมือ | หน้าที่ |
---|---|
Spring Boot | สร้าง backend ที่ดึงค่าเงินบาทจาก API |
SSE (Server-Sent Events) | ส่งข้อมูลจาก server ไปหน้าเว็บแบบเรียลไทม์ |
HTML + JavaScript | แสดงผลข้อมูลบนหน้าเว็บ |
Frankfurter API | แหล่งข้อมูลค่าเงิน (USD → THB) |
📁 โครงสร้างโปรเจกต์
🧩 ขั้นตอนที่ 1 — เขียน Service ดึงข้อมูลจาก Frankfurter
✅ ส่วนนี้คือหัวใจของระบบ
ดึงค่าเงินบาทจาก Frankfurter API
ส่งข้อมูลออกทาง
SseEmitter
ให้กับทุก Client
🧩 ขั้นตอนที่ 2 — เขียน Controller สำหรับเปิด Stream
Endpoint
/api/baht/stream
จะเปิดช่องทาง “ถ่ายทอดสด”
เมื่อมีข้อมูลใหม่ Spring จะส่งให้ browser โดยอัตโนมัติ
🧩 ขั้นตอนที่ 3 — สร้างหน้าเว็บ index.html
วางไฟล์นี้ในsrc/main/resources/static/index.html
เปิดหน้าเว็บที่
http://localhost:8080
คุณจะเห็นตัวเลขค่าเงินบาทเปลี่ยนเองทุก 10 วินาที 🎯
⚙️ ขั้นตอนที่ 4 — ตั้งค่าใน application.yaml
ไฟล์นี้อยู่ที่ src/main/resources/application.yaml
อธิบายสั้น ๆ:
port
→ ระบุพอร์ตที่ Spring Boot จะรันrequest-timeout: -1
→ ปิดระบบตัดการเชื่อมต่ออัตโนมัติ (จำเป็นสำหรับ SSE)
🧠 การทำงานโดยรวม
Spring Boot รันขึ้นมาบนพอร์ต 8080
หน้าเว็บเปิดการเชื่อมต่อผ่าน
EventSource("/api/baht/stream")
Backend เรียกข้อมูลจาก Frankfurter API ทุก 10 วินาที
ส่งอัตราแลกเปลี่ยนใหม่มายัง browser
หน้าเว็บอัปเดตตัวเลขอัตโนมัติ โดยไม่ต้อง refresh
🎯 สรุปข้อดีของวิธีนี้
หัวข้อ | จุดเด่น |
---|---|
🔄 SSE (Server-Sent Events) | สื่อสารแบบ “ทางเดียวจาก Server → Client” เหมาะกับข้อมูลอัปเดตต่อเนื่อง |
🌐 Frankfurter API | ฟรี, ไม่ต้องสมัคร, JSON เข้าใจง่าย |
⚙️ Spring Boot | เขียน backend ได้สะดวก มี SseEmitter รองรับในตัว |
🧩 HTML + JS | ใช้เพียง EventSource ก็รับข้อมูลเรียลไทม์ได้ทันที |
💬 สรุปสั้น ๆ
“Frankfurter.app” ช่วยให้เราเข้าถึงข้อมูลอัตราแลกเปลี่ยนฟรี
เมื่อรวมกับ “Spring Boot + SSE” ก็สามารถสร้างระบบ
“อัปเดตค่าเงินบาทแบบเรียลไทม์” ได้ง่ายภายในไม่กี่ไฟล์เท่านั้น 🎉
ความคิดเห็น
แสดงความคิดเห็น