SmarMaker - Documentation
Docs» 03_front:requetes_api

Requêtes API

SmartCommon fournit le hook useApi qui simplifie les appels API avec gestion automatique de l'authentification JWT, du rafraîchissement de token et de la gestion des erreurs.

Documentation ky (client HTTP utilisé)

Configuration

1. Configurer le Provider

Le ApiProvider doit être configuré dans votre LibConfigProvider :

// src/appConfig.js

export const appConfig = {
  debug: true,
  api: {
    prefixUrl: import.meta.env.VITE_API_URL,
    timeout: 30000,
    debug: true
  }
};
// src/App.jsx

import { Provider } from '@cap-rel/smartcommon';
import { appConfig } from './appConfig';

export const App = () => {
  return (
    <Provider config={appConfig}>
      <Router />
    </Provider>
  );
};

Utilisation de useApi

Importer le hook

import { useApi } from '@cap-rel/smartcommon';

Structure retournée

Le hook useApi retourne un objet avec les méthodes suivantes :

Méthode Description
login(body, options) Connexion utilisateur, stocke automatiquement les tokens
logout(options) Déconnexion, supprime les tokens
entities(options) Récupère les entités disponibles (avant login)
device(body, options) Enregistre/sélectionne un appareil
public Instance ky pour les requêtes publiques
private Instance ky pour les requêtes authentifiées

Requête de connexion

import { useApi } from '@cap-rel/smartcommon';
import { Input, Button } from '@cap-rel/smartcommon';

export const Login = () => {
  const api = useApi();

  const handleSubmit = async (e) => {
    e.preventDefault();

    const formData = new FormData(e.target);
    const credentials = Object.fromEntries(formData.entries());

    try {
      const user = await api.login({
        ...credentials,
        rememberMe: true
      });

      console.log('Connecté:', user);
    } catch (error) {
      console.error('Erreur de connexion:', error);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <Input name="login" label="Email" type="email" />
      <Input name="password" label="Mot de passe" type="password" />
      <Button type="submit">Connexion</Button>
    </form>
  );
};

Requêtes authentifiées

Pour les requêtes nécessitant une authentification, utilisez api.private :

import { useApi } from '@cap-rel/smartcommon';
import { useState, useEffect } from 'react';
import { List, ListItem, Spinner } from '@cap-rel/smartcommon';

export const ItemsList = () => {
  const api = useApi();
  const [items, setItems] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchItems = async () => {
      try {
        const data = await api.private.get('items').json();
        setItems(data);
      } catch (error) {
        console.error('Erreur:', error);
      } finally {
        setLoading(false);
      }
    };

    fetchItems();
  }, []);

  if (loading) return <Spinner />;

  return (
    <List>
      {items.map(item => (
        <ListItem key={item.id}>{item.name}</ListItem>
      ))}
    </List>
  );
};

Requêtes POST/PUT/DELETE

const api = useApi();

// POST - Créer
const createItem = async (data) => {
  return api.private.post('items', { json: data }).json();
};

// PUT - Modifier
const updateItem = async (id, data) => {
  return api.private.put(`items/${id}`, { json: data }).json();
};

// DELETE - Supprimer
const deleteItem = async (id) => {
  return api.private.delete(`items/${id}`).json();
};

Requêtes publiques

Pour les requêtes ne nécessitant pas d'authentification :

const api = useApi();

const fetchPublicData = async () => {
  return api.public.get('public/info').json();
};

Fonctionnalités automatiques

Gestion des tokens

  • Le token d'accès est automatiquement ajouté aux headers des requêtes privées
  • Le token est rafraîchi automatiquement avant expiration
  • En cas d'erreur 401, un refresh est tenté automatiquement

Circuit breaker

  • Protection contre les requêtes en cascade en cas d'erreur serveur
  • Blocage temporaire des requêtes après plusieurs échecs
  • Détection automatique de la connexion internet

Headers automatiques

Chaque requête inclut automatiquement :

  • Authorization: Bearer <token> (requêtes privées)
  • X-DEVICEID: <uuid> (identification de l'appareil)

Méthode classique (fetch natif)

Si vous préférez utiliser fetch directement (non recommandé) :

Documentation API Fetch

const API_URL = import.meta.env.VITE_API_URL;

const request = {
  method: "POST",
  body: JSON.stringify(data),
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
    Authorization: `Bearer ${token}`
  }
};

fetch(`${API_URL}/items`, request)
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.error(error));

<note tip>Il est recommandé d'utiliser useApi plutôt que fetch natif pour bénéficier de la gestion automatique des tokens et du circuit breaker.</note>

Voir aussi

  • Stockage de données - Pour persister les données localement
  • Hooks - Documentation complète des hooks
  • Back (PHP) - Configuration des routes API côté serveur
Previous Next

Made with ❤ by CAP-REL · SmartMaker · GNU AGPL v3+
Code source · Faire un don
SmarMaker - Documentation
Traductions de cette page:
  • Français
  • Deutsch
  • English
  • Español
  • Italiano
  • Nederlands

Table of Contents

Table des matières

  • Requêtes API
    • Configuration
      • 1. Configurer le Provider
    • Utilisation de useApi
      • Importer le hook
      • Structure retournée
      • Requête de connexion
      • Requêtes authentifiées
      • Requêtes POST/PUT/DELETE
      • Requêtes publiques
    • Fonctionnalités automatiques
      • Gestion des tokens
      • Circuit breaker
      • Headers automatiques
    • Méthode classique (fetch natif)
    • Voir aussi
  • SmartAuth
  • SmartMaker - Back (PHP)
    • Mapping Dolibarr - React
  • SmartMaker - Front (React)
    • Animations de pages
    • Architecture
    • Astuces
    • Calendar
    • Composants et pages
    • Configuration du Provider
    • Debug et Logs
    • Hooks SmartCommon
    • PWA (Progressive Web App)
    • Requêtes API
    • Routage
    • SmartCommon
    • Stockage de données
    • Thèmes
    • Traductions
  • HowTo - Pas à pas - Votre première application
    • Développement PHP (back)
    • Développement React (front)
    • Première étape : Module Builder Dolibarr
    • SmartAuth
    • SmartBoot : Un "squelette" quasiment prêt à l'emploi
  • Formation SmartMaker
    • Module 1 : Fondamentaux JavaScript ES6+
      • Chapitre 1 : Variables et Scope
      • Chapitre 2 : Fonctions
      • Chapitre 3 : Programmation Asynchrone
      • Chapitre 4 : Modules ES6
    • Module 2 : Introduction à React
      • Chapitre 1 : Philosophie React
      • Chapitre 2 : JSX
      • Chapitre 3 : Composants
    • Module 3 : Hooks React Fondamentaux
      • Chapitre 1 : useState
      • Chapitre 2 : useEffect
      • Chapitre 3 : useRef
      • Chapitre 4 : useContext
    • Module 4 : React Avancé
      • Chapitre 1 : useCallback et useMemo
      • Chapitre 2 : Custom Hooks
      • Chapitre 3 : Redux et Redux Toolkit
    • Module 5 : Architecture SmartMaker
      • Chapitre 1 : Structure du projet
      • Chapitre 2 : Configuration
      • Chapitre 3 : Flux de données
    • Module 6 : SmartCommon - Composants
      • Chapitre 1 : Mise en page
      • Chapitre 2 : Navigation
      • Chapitre 3 : Formulaires
      • Chapitre 4 : Affichage
    • Module 7 : SmartCommon - Hooks
      • Chapitre 1 : useApi
      • Chapitre 2 : Gestion d'état
      • Chapitre 3 : Hooks utilitaires
    • Module 8 : Backend API (PHP)
      • Chapitre 1 : Routage
      • Chapitre 2 : Controllers
      • Chapitre 3 : Mappers
      • Extrafields et formulaires dynamiques
    • Module 9 : Intégration complète
      • Chapitre 1 : Backend
      • Chapitre 2 : Frontend
      • Chapitre 3 : Déploiement
    • Module 10 : Fonctionnalités avancées
      • Chapitre 1 : Mode offline
      • Chapitre 2 : Internationalisation (i18n)
      • Chapitre 3 : Autres fonctionnalités
    • Module 11 : Bonnes pratiques
  • Démonstration
  • Start
  • Composants et pages
  • Afficher le texte source
  • Anciennes révisions
  • Liens de retour
  • Haut de page