Centralized respan_params initialization and backward-compat layer.
This mixin is the SINGLE initialization point for respan_params.
It runs _initialize_respan_params() BEFORE super().initial() so
that by the time the throttle runs, respan_params is a fully resolved
dict. Downstream code (throttle, preprocessing, view handler) only
enriches the existing dict — they never need to create it.
Initialization order::
_initialize_respan_params() ← legacy rename + header parse + metadata ↓ super().initial() ← throttle ENRICHES the existing dict ↓ view handler ← billing, security strip, etc.
Responsibilities consolidated here (previously scattered across 4 callsites):
Safe for protobuf endpoints: body adaptation is skipped when request.data is not a dict; header adaptation always runs.
Usage::
class MyChatView(AdaptRespanParamsMixin, APIView): …