圧縮とキャッシュ
GET /markets のような大きな公開読み取りは、数メガバイトの JSON になります。圧縮を要求し、各レスポンスの Cache-Control ヘッダーでデータの鮮度を確認してください。
圧縮
Accept-Encoding: gzip を送信すると、API は Content-Encoding: gzip を付けて gzip 圧縮したボディを返します。GET /markets は約 4 MB から約 0.6 MB に縮小されます。
- ブラウザ と Node.js の
fetchは、ヘッダーを送信し、自動的に展開します。 - Rust の
hypercall-clientは HTTP クライアントで gzip を有効にしているため、すべての REST 呼び出しで gzip を要求し、透過的にデコードします。 - 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 から直接返されたものです。