Agent-skills-standard angular-http-client

Integrate HttpClient, Interceptors, and API interactions in Angular. 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/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/angular/angular-http-client" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-angular-http-client && rm -rf "$T"
manifest: skills/angular/angular-http-client/SKILL.md
source content

HTTP Client

Priority: P1 (HIGH)

Principles

  • Functional Interceptors: Use HttpInterceptorFn (e.g.,
    (req, next) => next(req.clone({ setHeaders: { Authorization: token } }))
    ). Clone requests with
    req.clone(
    class-based interceptors deprecated. Register via withInterceptors([...]) in provideHttpClient.
  • Typed Responses: Always type
    http.post<T>()
    ,
    http.get<T>()
    . Use
    inject(HttpClient)
    in services (not constructor injection). Add provideHttpClient(withInterceptors([...]), withFetch()) to
    app.config.ts
    .
  • Services: Encapsulate all HTTP calls in Services. Never call
    http
    in Components.

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
    shareReplay(1)
    in services.
  • Error Handling: Handle errors in service using
    catchError
    or global interceptors, not components. Use notification service for display.
  • 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
    HttpInterceptorFn
    functional interceptors.
  • No manual subscribe for GET: Use httpResource() or
    toSignal(http.get(...))
    instead.

References