Aller au contenu

HttpClientOptions

HttpClientOptions se décide une fois par API cible. Les champs essentiels ne doivent pas être déduits implicitement par l'application.

Options essentielles

Option Obligatoire Défaut Effet À utiliser quand À éviter si
baseUrl Oui Aucun Construit toutes les URL relatives. Toujours, avec une racine stable comme https://api.example.com/v1. Ne pas mettre /users/42 ou mélanger plusieurs backends.
auth Oui Aucun Produit la politique d'auth avant les guards applicatifs. bearerAuth, cookieAuth, apiKeyAuth, basicAuth ou noAuth. Ne pas simuler une absence d'auth avec un token vide.
parser Oui Aucun Transforme le corps brut en ClientResult<T>. Choisir un preset REST, Laravel, Nest, GraphQL ou structured. Ne pas analyser la réponse dans les composants UI.
fetch Non globalThis.fetch Implémentation transport utilisée par le client. Tests, runtimes spécifiques, mocks ou instrumentation bas niveau. Ne pas passer une référence window.fetch détachée sans bind dans les vieux environnements.

Options de comportement

Option Défaut Explication précise
cache Désactivé Store de cache lu uniquement sur GET quand la requête fournit RequestOptions.cache. memoryCache supporte TTL, tags et taille max.
notifier consoleNotifier Reçoit les événements réseau, HTTP et parsing si defaults.shouldNotify le permet.
redirects { mode: "follow", maxHops: 5 } Contrôle les redirections applicatives. Les headers auth doivent être retirés sur redirection cross-origin.
plugins [] Plugins appliqués à la création du client et dédupliqués par nom.
guards [] Pipeline de middleware exécuté dans l'ordre déclaré après le guard d'auth interne.

Defaults

Option Défaut Usage recommandé
defaults.headers {} En-têtes constants : Accept-Language, X-App-Version, tenant id. Ne pas y mettre Authorization.
defaults.timeoutMs Aucun timeout global Poser une limite lisible pour une API interactive, par exemple 10_000.
defaults.shouldNotify (result) => !result.ok Filtrer les 400 de validation si elles doivent rester dans les formulaires.

Exemple strict

import {
  bearerAuth,
  createApiParserStructured,
  createHttpClient,
  memoryCache
} from "@cedvict/http-guardian";

export const api = createHttpClient({
  baseUrl: "https://api.example.com/v1",
  auth: bearerAuth(() => authStore.accessToken(), {
    allowedOrigins: ["https://api.example.com"]
  }),
  parser: createApiParserStructured(),
  cache: memoryCache({ maxEntries: 500 }),
  defaults: {
    headers: { "X-App-Version": "web-1.0.0" },
    timeoutMs: 10_000,
    shouldNotify: ({ ok, status }) => !ok && (status === 0 || status >= 500)
  }
});