Skillshub angular-http-client
Best practices for HttpClient, Interceptors, and API interactions. Use when integrating HttpClient, writing interceptors, or handling API calls in Angular. (triggers: **/*.service.ts, **/*.interceptor.ts, HttpClient, HttpInterceptorFn, withInterceptors, httpResource, resource)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/angular-http-client" ~/.claude/skills/comeonoliver-skillshub-angular-http-client && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/angular-http-client/SKILL.mdsource content
HTTP Client
Priority: P1 (HIGH)
Principles
- Functional Interceptors: Use HttpInterceptorFn (e.g.,
). Clone requests with(req, next) => next(req.clone({ setHeaders: { Authorization: token } }))
— class-based interceptors are deprecated. Register via withInterceptors([...]) in provideHttpClient.req.clone( - Typed Responses: Always type
,http.post<T>()
. Usehttp.get<T>()
in services (not constructor injection). Add provideHttpClient(withInterceptors([...]), withFetch()) toinject(HttpClient)
.app.config.ts - Services: Encapsulate all HTTP calls in Services. Never call
in Components.http
Signal-Based HTTP (Angular 17+)
Prefer httpResource<T>() over manual subscribe for reactive data loading — it auto-refetches when its signal inputs change:
// Reactive: refetches automatically when userId() changes userResource = httpResource<User>(() => `/api/users/${this.userId()}`); // States: .isLoading() | .hasValue() | .error() | .value() | .reload()
Use resource<T, P>({ request: () => params(), loader: ... }) for non-HTTP async operations with full .isLoading() lifecycle control.
Guidelines
- Caching: Implement caching in interceptors or using
in services.shareReplay(1) - Error Handling: Handle errors in the service using
or global interceptors, not components. Use a notification service for display.catchError - Context: Use HttpContext to pass metadata to interceptors (e.g., skip error handling or specific caching rules).
Anti-Patterns
- No HTTP in Components: Encapsulate all HTTP calls in Services.
- No class-based interceptors: Use
functional interceptors.HttpInterceptorFn - No manual subscribe for GET: Use httpResource() or
instead.toSignal(http.get(...))