Start here. This is the direct spoken answer to practice first.
Overview
Interceptors are transport middleware; they should handle cross-cutting request behavior, not absorb feature workflows.
I use an interceptor for consistent transport concerns such as attaching an access token, correlation metadata, normalized logging, or mapping a shared authentication failure. Current Angular guidance favors functional interceptors because their behavior is more predictable in complex setups. Feature-specific decisions and user messages stay in the owning service or component.