Client-Side Resiliency Patterns: Ensuring Robust Applications