압축 및 캐싱
GET /markets와 같은 대용량 공개 조회는 수 메가바이트 분량의 JSON입니다. 압축을 요청하고, 각 응답의 Cache-Control 헤더를 통해 데이터가 얼마나 최신인지 확인하십시오.
압축
Accept-Encoding: gzip을 전송하면 API는 본문을 gzip으로 압축하여 Content-Encoding: gzip과 함께 반환합니다. GET /markets의 경우 약 4 MB에서 약 0.6 MB로 줄어듭니다.
- 브라우저와 Node.js
fetch는 헤더를 전송하고 자동으로 압축을 해제합니다. - **Rust
hypercall-client**는 HTTP 클라이언트에서 gzip을 활성화하므로, 모든 REST 호출이 압축을 요청하고 투명하게 디코딩합니다. - Python
requests와httpx는 기본적으로 헤더를 전송하고 압축을 해제합니다. 일반urllib는 둘 다 하지 않으므로 압축되지 않은 본문을 받게 됩니다. - curl은
--compressed옵션이 필요합니다.
약 1 KB 미만의 응답은 압축되지 않은 상태로 전송됩니다. WebSocket 프레임은 영향을 받지 않습니다. WebSocket 압축을 참고하십시오.
Cache-Control
모든 조회 응답은 공유 캐시가 해당 응답을 저장할 수 있는지 여부를 알려줍니다.
| 응답 헤더 | 표시되는 위치 | 의미 |
|---|---|---|
public, max-age=N | 공개 시장 데이터: /markets, /instruments, /instrument-specs, /exchange-info, 그릭스, 옵션 및 만기 요약, 과거 이론가, 풀 조회, /version | 모든 캐시가 최대 N초 동안 본문을 재사용할 수 있습니다. 대부분 1~15초이며, 과거 데이터는 더 길 수 있습니다. |
public, max-age=N, stale-while-revalidate=M | 위 조회 중 일부 | N초가 지난 후에도 캐시는 백그라운드에서 새 본문을 가져오는 동안 최대 M초 더 이전 본문을 계속 제공할 수 있습니다. |
no-store | 지갑 범위 및 인증된 조회: 포트폴리오, 미체결 주문, 체결 내역, 지갑별로 필터링된 거래, MMP 설정 등 | 어떤 캐시에도 저장되지 않습니다. 모든 요청이 API에 도달합니다. |
| 없음 | /orderbook 및 모든 쓰기 요청을 포함한 그 외 모든 항목 | 캐시되지 않습니다. |
public 조회 응답은 최대 max-age(여기에 stale-while-revalidate가 있으면 그만큼 추가)초만큼 지난 데이터일 수 있다고 간주하십시오. 거래 결정을 위해 최신 상태가 필요한 경우, 캐시되지 않는 WebSocket 채널이나 지갑 범위 조회를 통해 읽으십시오.
오류 응답(4xx, 5xx)에는 절대 public이 붙지 않으며 캐시되지 않습니다. API가 오류를 반환하는 동안 캐시가 만료된 본문을 계속 제공하지 않으며, 오류가 그대로 전달됩니다.
항상 API에 도달하는 요청
다음 중 하나라도 포함된 요청에는 캐시된 본문이 절대 반환되지 않으며, 해당 요청이 받은 응답도 저장되지 않습니다.
Authorization또는CookieX-Hypercall-Signature또는X-Hypercall-Expires-At-Ms(MMP 설정과 같은 서명된 조회)X-Hypercall-Fence또는X-Hypercall-Fence-Wait(쓰기 후 읽기 일관성, 마켓메이커 보호 참고)X-Hypercall-Gateway-Token또는X-Admin-KeyGET또는HEAD이외의 모든 메서드 및 WebSocket 업그레이드
쓰기 후 읽기 펜스와 캐싱은 절대 함께 사용되지 않습니다. X-Hypercall-Fence를 처리하는 경로는 no-store이며, public 경로는 펜스를 기다리지 않습니다.
X-Cache-Status
Hypercall 엣지 캐시를 거치는 응답에는 X-Cache-Status가 포함됩니다.
| 값 | 의미 |
|---|---|
HIT | max-age 이내에 엣지 캐시에서 제공되었습니다. |
MISS | API에서 가져왔습니다. 응답이 public이었다면 이제 캐시에 저장됩니다. |
BYPASS | 요청에 위 목록의 헤더가 포함되어 있어 API로 직접 전달되었으며 아무것도 저장되지 않았습니다. |
EXPIRED | 캐시된 사본의 유효 기간이 지나 API에 다시 요청했습니다. |
STALE 또는 UPDATING | 새 사본을 가져오는 동안 stale-while-revalidate 구간 내에서 캐시로부터 제공되었습니다. |
쓰기 요청 및 기타 GET이 아닌 요청에는 X-Cache-Status가 없습니다. 이 헤더는 참고용이므로 거래 로직을 이 헤더에 따라 분기하지 마십시오. 아직 모든 환경에 엣지 캐시가 적용된 것은 아닙니다. 헤더가 없는 응답은 API에서 직접 온 것입니다.