
RESTful API 설계와 WebSocket 통합
시세 데이터와 트레이딩 API를 구축하고 활용하는 법
REST: 리소스와 동사
REST는 CRUD를 HTTP에 매핑합니다: 읽기는 GET, 생성은 POST, 부분 업데이트는 PATCH, 삭제는 DELETE입니다. 상태 코드는 정직하게 사용하십시오 — 오류 JSON을 담은 200은 클라이언트를 망가뜨립니다.
경로에 버전을 명시하고(/v1/), 큰 목록은 페이지네이션하며(추가 전용 스트림에는 커서 기반 피드), 하위 호환성이 깨지는 변경사항은 사용 중단 유예 기간을 두고 문서화하십시오.
키와 HMAC
API 키는 신원을 식별하고, 시크릿은 그것을 증명합니다. 거래 엔드포인트의 경우, 정규화된 문자열(메서드 + 경로 + 본문 + 타임스탬프)을 HMAC으로 서명해 시크릿이 네트워크로 실려 나가지 않게 하십시오. 리플레이 공격을 막기 위해 오래된 타임스탬프는 거부하십시오 — ±30초가 흔한 허용 범위입니다.
OAuth는 제3자 앱에 적합하고, 순수한 거래소 봇들은 흔히 키+HMAC 방식을 유지합니다. 속도 제한: 429를 예상하고 Retry-After를 준수하십시오.
WebSocket 업그레이드
세션은 Upgrade: websocket이 포함된 HTTP GET으로 시작하며, 서버는 101 Switching Protocols를 반환합니다. 그 이후로는 HTTP 폴링에서 반복되는 TLS 핸드셰이크에 비해 프레임 전송이 훨씬 저렴합니다.
구독 메시지는 보통 JSON입니다: 메서드, 채널, 그리고 비공개 체결 정보를 위한 인증 서명이 포함되기도 합니다.
호가창, 체결, 복구
체결 스트림은 틱 데이터이고, 호가창은 시퀀스 번호가 붙은 스냅샷 + 델타 방식입니다. 시퀀스를 놓쳤다면 REST 스냅샷으로 다시 동기화한 다음 시퀀스 > 스냅샷인 델타들을 적용하십시오.
하트비트: ping을 보내거나 서버의 ping을 기다리며, 대규모 동시 재접속(썬더링 허드)을 피하기 위해 지터를 준 백오프로 재연결하십시오.
GraphQL과 OpenAPI
GraphQL은 대시보드에서 과도한 데이터 가져오기를 줄여주지만, 많은 거래소는 거래의 핫패스를 위해 여전히 REST를 노출합니다. OpenAPI(Swagger) 명세는 코드 생성과 QA에 도움이 됩니다 — 예시는 그대로 복사해서 쓸 수 있게 유지하십시오.
최소한의 컨슈머 패턴
WebSocket 루프를 태스크로 실행하고, 최신 가격을 스레드 안전한 맵에 넣고, 헬스체크를 위한 HTTP를 노출하십시오. 재연결 횟수를 로그로 남기고, 급증할 때는 알림을 보내십시오.
서명과 시계 오차 테스트를 CI에 넣으십시오. 운영 환경에서 깨진 HMAC은 로그를 감사하기 전까지는 '시장이 움직였다'와 구별되지 않습니다.

