I want to be updated of the BBO for every asset pair (there are 630 or so on Coinbase).
It is currently only possible via REST endpoint, but that is obviously too slow to manage for 630 pairs. Plus, with REST you are polling, whereas a web socket has the advantage that it pushes updates to you when they happen.
I know the level2 channel exists, but this has updates for the entire orderbook. I just want to know the BBO, a.k.a. the first best layer of the orderbook. As other users also pointed out, your message structure for level2 messages (or any message, really) is ridiculously verbose. Now imagine that for 630 pairs.
Other exchanges have a way better message structure for their orderbook, optimized for bandwidth. Example:
{"a": [
["0.05120", "0.00000500", "1582905486.493008"],
["0.05275", "0.00000500", "1582905486.493034"]
]
},
{"b": [
["0.04765", "0.00000500", "1582905486.493008"],
["0.04940", "0.00000500", "1582905486.493034"]
]
}
^ where it is documented that a = asks and b = bids, and the numbers are in order of price, volume, timestamp.
Compare this to Coinbase which writes out every word in full, for every single line in the order book…
"side":"bid","event_time":"1970-01-01T00:00:00Z","price_level":"0.07626","new_quantity":"12899"}
And contains garbage data, such as event_time always being 1970-01-01 (epoch time).
Please provide a lightweight web socket channel for the BBO only.