
Thiết kế RESTful API và tích hợp WebSocket
Xây dựng và sử dụng API dữ liệu thị trường và giao dịch
REST: Tài nguyên và động từ
REST ánh xạ CRUD sang HTTP: GET để đọc, POST để tạo, PATCH để cập nhật một phần, DELETE để xóa. Dùng mã trạng thái một cách trung thực — 200 kèm một JSON lỗi sẽ làm hỏng client.
Đánh phiên bản trong đường dẫn (/v1/), phân trang các danh sách lớn (feed dạng cursor cho các luồng chỉ thêm dữ liệu), và ghi lại tài liệu về các thay đổi phá vỡ tương thích với một cửa sổ ngừng hỗ trợ (deprecation window).
Khóa và HMAC
API key nhận diện; secret chứng minh. Đối với các endpoint giao dịch, hãy dùng HMAC trên một chuỗi chuẩn (phương thức + đường dẫn + phần thân + dấu thời gian) để secret không bao giờ đi trên đường truyền. Từ chối các dấu thời gian đã cũ để chặn tấn công lặp lại (replay) — ±30 giây là một cửa sổ phổ biến.
OAuth phù hợp với các ứng dụng bên thứ ba; các bot sàn giao dịch thuần túy thường vẫn dùng key+HMAC. Hạn mức tần suất: hãy chờ đợi 429 và tuân theo Retry-After.
Nâng cấp WebSocket
Phiên làm việc bắt đầu như một HTTP GET với Upgrade: websocket; máy chủ trả về 101 Switching Protocols. Sau đó, các frame rẻ hơn nhiều so với việc lặp lại bắt tay TLS trên polling HTTP.
Các thông điệp đăng ký (subscribe) thường là JSON: phương thức, kênh, và đôi khi là chữ ký xác thực cho các khớp lệnh riêng tư.
Sổ lệnh, giao dịch, khôi phục
Luồng giao dịch là dữ liệu tick; sổ lệnh là ảnh chụp trạng thái (snapshot) + delta kèm số thứ tự (sequence number). Nếu bạn bị mất các số thứ tự, hãy đồng bộ lại từ ảnh chụp trạng thái REST rồi áp dụng các delta có số thứ tự lớn hơn số thứ tự của ảnh chụp.
Heartbeat: gửi ping hoặc chờ ping từ máy chủ; kết nối lại với backoff có độ rung ngẫu nhiên (jitter) để tránh hiện tượng dồn tải hàng loạt (thundering herd).
GraphQL và OpenAPI
GraphQL cắt giảm việc lấy dữ liệu dư thừa cho các bảng điều khiển (dashboard); nhiều sàn giao dịch vẫn dùng REST cho các đường thực thi giao dịch nóng. Đặc tả OpenAPI (Swagger) hỗ trợ sinh mã (codegen) và kiểm định chất lượng (QA) — giữ các ví dụ có thể sao chép và dán trực tiếp.
Một mẫu tiêu thụ dữ liệu tối giản
Chạy vòng lặp WebSocket trong một task, đẩy các giá gần nhất vào một map an toàn cho đa luồng (thread-safe), phơi ra HTTP cho kiểm tra sức khỏe. Ghi log số lần kết nối lại; cảnh báo khi con số đó tăng vọt.
Đặt các bài kiểm tra ký lệnh và lệch đồng hồ trong CI: một HMAC bị hỏng trong môi trường sản xuất không thể phân biệt được với "thị trường đã di chuyển" cho đến khi bạn kiểm toán log.