
การออกแบบ 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)
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
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