La gestion des erreurs des clients est simple et directe. Nous utilisons une
seule classe d’erreur qui conserve toutes les informations nécessaires pour le
debugging.
Structure de l’Erreur
/**
* Erreur pour les clients d'API.
* Conserve le message original de l'API, le statusCode et l'erreur originale.
*/
export class ClientError extends Error {
constructor(
message: string,
public readonly statusCode?: number,
public readonly originalError?: unknown
) {
super(message);
this.name = "ClientError";
}
}
Implémentation
export class HubriseClient {
async createOrder(order: Order): Promise<Order> {
try {
const response = await fetch(`${this.baseUrl}/orders`, {
method: "POST",
headers: this.headers,
body: JSON.stringify(order),
});
if (!response.ok) {
throw new ClientError(await response.text(), response.status, response);
}
return await response.json();
} catch (error) {
throw new ClientError(
error instanceof Error ? error.message : "Erreur inconnue",
undefined,
error
);
}
}
}
Caractéristiques
Simplicité
• Une seule classe d’erreur• Pas de codes d’erreur complexes• Message d’erreur original de l’API
Debugging
• StatusCode HTTP conservé• Erreur originale disponible• Message clair et direct
Tracing
• Facile à tracer dans Sentry• Contexte complet conservé• Origine de l’erreur claire
Exemple d’Utilisation
try {
const order = await hubriseClient.createOrder(newOrder);
} catch (error) {
if (error instanceof ClientError) {
// On peut accéder à :
// error.message - Le message d'erreur
// error.statusCode - Le code HTTP
// error.originalError - L'erreur originale
}
throw error;
}