GaiaEx AcademyGaiaEx Academy
การออกแบบ RESTful API และการเชื่อมต่อ WebSocket
นักพัฒนาการเขียนโปรแกรม10 min read

การออกแบบ RESTful API และการเชื่อมต่อ WebSocket

สร้างและเรียกใช้ API ข้อมูลตลาดและการเทรด

แชร์โพสต์

REST: Resources และ Verbs

REST ทำการแมป CRUD เข้ากับ HTTP: GET สำหรับการอ่าน POST สำหรับการสร้าง PATCH สำหรับการอัปเดตแบบบางส่วน DELETE สำหรับการลบ ใช้ status code อย่างตรงไปตรงมา — 200 ที่ส่ง error กลับมาเป็น JSON จะทำให้ client พัง

ทำเวอร์ชันไว้ใน path (/v1/) แบ่งหน้าสำหรับรายการขนาดใหญ่ (cursor feed สำหรับ stream แบบเพิ่มต่อท้ายอย่างเดียว) และบันทึกการเปลี่ยนแปลงที่ทำให้เข้ากันไม่ได้พร้อมช่วงเวลาเลิกใช้งาน (deprecation window)

REST vs WEBSOCKET Commands vs streaming—most exchanges use both REST (HTTPS) Request → response → idle Place/cancel, balances, snapshots WebSocket Persistent duplex channel Trades, book deltas, tickers
ใช้ REST สำหรับการเปลี่ยนสถานะ ใช้ WebSocket สำหรับข้อมูลตลาดต่อเนื่อง — อย่า poll order book ที่อัตราจำกัดของ HTTP

Keys และ HMAC

API key เป็นตัวระบุตัวตน secret เป็นตัวพิสูจน์ตัวตน สำหรับ endpoint การเทรด ให้ทำ HMAC กับ canonical string (method + path + body + timestamp) เพื่อไม่ให้ secret ต้องวิ่งผ่านสาย ปฏิเสธ timestamp ที่เก่าเกินไปเพื่อป้องกันการ replay — ±30 วินาทีเป็นช่วงที่ใช้กันทั่วไป

OAuth เหมาะกับแอปของบุคคลที่สาม บอทที่เทรดบนตลาดแลกเปลี่ยนตรง ๆ มักใช้ key+HMAC ต่อไป Rate limit: คาดว่าจะได้ 429 และให้ปฏิบัติตาม Retry-After

การอัปเกรด WebSocket

เซสชันเริ่มต้นด้วย HTTP GET ที่มี Upgrade: websocket เซิร์ฟเวอร์ตอบกลับด้วย 101 Switching Protocols หลังจากนั้น frame มีต้นทุนถูกมากเมื่อเทียบกับการทำ TLS handshake ซ้ำ ๆ บน HTTP polling

ข้อความ subscribe มักเป็น JSON: method, channel และในบางกรณีมี auth signature สำหรับข้อมูล fill ส่วนตัว

Books, Trades, Recovery

Trades stream คือ tick data ส่วน book เป็น snapshot + delta พร้อม sequence number ถ้าคุณพลาด sequence ให้ resync จาก REST snapshot แล้วนำ delta ที่มี sequence > snapshot มาปะติดปะต่อ

Heartbeat: ส่ง ping หรือคาดว่าเซิร์ฟเวอร์จะส่ง ping มาให้ reconnect ด้วย backoff แบบ jittered เพื่อหลีกเลี่ยง thundering herd

ORDER BOOK RESYNC Sequence gaps mean your local book is wrong until fixed WS drop REST snapshot Subscribe deltas apply only if seq > snapshot_seq seq: 10421 gap 10422–10429 snapshot @10429 delta 10430+ Trading on a stale book is worse than pausing quotes for one second
หลังการหลุดการเชื่อมต่อ: ทำ snapshot แล้วตามด้วย delta — อย่าเดาระดับราคาที่ขาดหายไป

GraphQL และ OpenAPI

GraphQL ช่วยลดการดึงข้อมูลเกินความจำเป็นสำหรับ dashboard ตลาดแลกเปลี่ยนหลายแห่งยังคงเปิด REST สำหรับ hot path การเทรด สเปก OpenAPI (Swagger) ช่วยงาน codegen และ QA — คงตัวอย่างให้คัดลอกวางใช้งานได้ทันที

แพทเทิร์นผู้บริโภคแบบเรียบง่าย

รัน WebSocket loop ใน task แยก push ราคาล่าสุดเข้า thread-safe map เปิด HTTP สำหรับ health check บันทึกจำนวนการ reconnect แจ้งเตือนเมื่อพุ่งสูงขึ้น

ใส่การทดสอบ signing และ clock skew ไว้ใน CI: HMAC ที่พังบน production แยกไม่ออกจาก "ตลาดขยับ" จนกว่าคุณจะตรวจสอบ log