§ 04 / 05 — GRAPHQL API PLATFORM

GraphQL sans les écueils classiques.

Schéma GraphQL unifié (laissez le client choisir les champs qu'il récupère — idéal mobile, tableaux de bord, partenaires) généré depuis votre code, avec des protections anti-surcharge intégrées, des événements temps réel, et la même source de vérité que votre REST. Livraison par un spécialiste GraphQL freelance noté 4,95/5 sur Malt, scope cadré, kick-off sous 1 semaine.

§ 01 — Le problème

Le problème.

Sans expert
  • Requêtes en cascade — Une requête imbriquée déclenche 500 accès à la base — l'écueil classique de GraphQL.
  • Schéma divergent du code — Écrit à la main, il dérive du code — bugs permanents et silencieux.
  • Pas de limites — Ni limite sur le nombre d'appels ni sur la profondeur : un client peut paralyser le serveur avec une requête tordue.
  • Schéma exposé en production — Tout le détail de votre API est ouvert à l'inspection : surface d'attaque monstrueuse.
  • « Temps réel » bricolé — Fausse mise à jour temps réel par appels répétés : ce n'est pas du temps réel, juste de la surcharge.
Avec Vulcain
  • Optimisations anti-surcharge systématiques (regroupement intelligent des requêtes base)
  • Schéma auto-généré depuis votre code
  • Limites configurables de profondeur et de complexité
  • Schéma non-exposé en production
  • Notifications temps réel via un standard web moderne.
§ 02 — Ce qui est livré

Ce qui est livré.

§ 01

Schéma unifié

Structure de données auto-générée depuis votre code. Un seul modèle, REST et GraphQL cohérents.

  • Types auto-générés
  • Cohérence REST/GQL
  • Cas particuliers gérés
  • Types personnalisés
§ 02

Anti-surcharge base

Les données liées sont récupérées en une seule requête groupée, pas une par ligne. Une requête avec 100 éléments imbriqués fait 2 accès à la base, pas 101.

  • Requêtes groupées
  • Cache par requête
  • Accès base mutualisés
  • Taille des lots réglable
§ 03

Limites de requêtes

Limite de profondeur, limite de complexité, délai d'attente maximum. Un client ne peut pas paralyser le serveur avec une requête tordue.

  • Limite de profondeur
  • Score de complexité
  • Délai maximum
  • Limitation d'appels
§ 04

Notifications temps réel

Événements poussés via un standard web moderne (Mercure). Votre application cliente reçoit les mises à jour sans interroger le serveur en boucle.

  • Standard moderne
  • Événements poussés
  • Authentification par canal
  • Passage à l'échelle horizontal
§ 05

Tests d'intégration

Tests automatisés qui envoient de vraies requêtes GraphQL. Tests de contrat, tests des opérations de modification, tests des notifications.

  • Tests de lecture
  • Tests de modification
  • Tests de notification
  • Jeux de données
§ 06

Outillage développeur

Interface de test interactive en développement (désactivée en production), export du schéma, génération automatique de clients TypeScript si pertinent.

  • Interface de test dev
  • Export du schéma
  • Génération de clients
  • Types TypeScript générés
src/GraphQL/ProductResolver.php php
final class ProductResolver implements QueryCollectionResolverInterface
{
    public function __construct(
        private readonly CategoryLoader $categoryLoader,
    ) {}

    /** @param iterable<Product> $collection */
    public function __invoke(iterable $collection, array $context): iterable
    {
        // Préload de toutes les catégories référencées en 1 requête SQL
        $categoryIds = array_unique(array_map(
            fn (Product $p) => $p->getCategoryId(),
            iterator_to_array($collection),
        ));
        $this->categoryLoader->preload($categoryIds);

        return $collection;
    }
}

Un résolveur typé qui regroupe les accès base en une seule requête groupée, même si la requête imbrique 500 produits avec leurs catégories.

§ 04 — Tarifs & délais
§ 01

GraphQL — premier périmètre

3 à 5 semaines

Ajout d'une couche GraphQL sur une API existante. 5 à 10 types de données, lectures et modifications, protections anti-surcharge, tests.

  • 5 à 10 types
  • Lectures + modifications
  • Anti-surcharge
  • Tests
  • Interface de test dev
§ 02

GraphQL complet

5 à 10 semaines

Schéma étendu, notifications temps réel, droits fins, limites de requête, supervision, génération de clients.

  • Tout du premier périmètre
  • Notifications temps réel
  • Droits fins
  • Limites de requête
  • Supervision
  • Génération de clients
§ 03

GraphQL fédéré

8 à 16 semaines

Un seul point d'entrée GraphQL qui agrège plusieurs services internes, avec cache distribué.

  • Fédération de services
  • Point d'entrée unique
  • Composition de schémas
  • Cache distribué
  • Multi-services

Tarifs sur devis après cadrage · forfait ou régie selon le format

§ 04 — Questions fréquentes

Questions sur GraphQL.

§ 01 Freelance ou agence pour livrer notre API GraphQL ?

L'agence facture une équipe rotative et un chef de projet : confortable mais cher, parfois lent. Un freelance senior (9+ ans Symfony, 4,95/5 sur Malt) prend la responsabilité technique de bout en bout, avec un interlocuteur unique sur la durée. Bon choix quand le scope est cadré et que la qualité du code prime sur la quantité de têtes. Mauvais choix si vous avez besoin d'une équipe de 5 dev à mobiliser demain. Détail des missions sur <a href="/specialiste-graphql">la page spécialiste GraphQL</a>.

§ 02 Combien ça coûte une fois livré, à l'année ?

Pas d'abonnement après livraison. Vos coûts récurrents : hébergement (selon trafic), supervision (gratuit ou outil 20-50 €/mois), maintenance corrective (incluse 3 mois, puis régie ponctuelle au besoin). Une API GraphQL bien conçue tourne sans intervention pendant des années — les frais récurrents sont marginaux par rapport au coût de développement initial.

§ 03 Et si je veux reprendre ou changer de prestataire dans 2 ans ?

Code source, schéma, tests, documentation, scripts de déploiement — tout vous appartient et est livré dans un repo Git à votre nom. Analyse statique au niveau maximum, 80 %+ de couverture de tests. N'importe quel développeur Symfony senior peut reprendre sans temps de prise en main interminable. Aucun verrou.

§ 04 REST ou GraphQL ?

REST pour les API publiques avec cache HTTP et consommateurs variés. GraphQL pour les API internes ou mobiles où les clients ont besoin de sélectionner finement les champs et d'agréger plusieurs ressources en une requête. API Platform expose les deux depuis la même source.

§ 05 C'est plus lent que REST ?

Avec les optimisations anti-surcharge et les limites de complexité, les performances sont comparables à REST. Sans ces optimisations, c'est catastrophique. C'est pourquoi je ne livre jamais de GraphQL sans ces protections.

§ 06 Comment API Platform génère-t-il GraphQL automatiquement ?

API Platform analyse vos objets métier et génère automatiquement le schéma GraphQL : types, lectures, modifications, relations. Configuration via annotations PHP. Support natif de la pagination, des filtres, et des vues personnalisables.

§ 07 Mon front mobile a besoin de GraphQL ?

Souvent oui. Sur mobile, chaque kilo-octet compte et chaque écran demande des données différentes. GraphQL laisse l'app mobile demander exactement les champs dont elle a besoin et agréger plusieurs ressources en une seule requête — utile sur réseau lent. Sur un site web classique avec une bonne API REST en cache, le gain est plus discutable.

§ 08 Comment sécuriser GraphQL ?

Limite d'appels par client, limite de profondeur (10 par défaut), score de complexité (1000 par défaut), délai maximum (5 s), schéma non-exposé en production, vérification des droits à chaque accès.

§ 09 Les notifications temps réel, c'est fiable ?

Via le standard Mercure, oui. Basé sur HTTP standard, ça passe à l'échelle horizontalement, sans configuration réseau particulière. Repli automatique sur les technologies plus anciennes pour les rares clients qui ne supportent pas le standard moderne.

§ 06 — Voir aussi
§ 07 — Cadrer votre API GraphQL

Un schéma GraphQL à concevoir ou à réparer ?

15 minutes pour comprendre vos cas d'usage (mobile, partenaires, tableaux de bord), votre code existant et le palier pertinent. Devis chiffré sous 24 h.

  • 01
    On audite votre schéma actuel (si vous en avez un) ou vos besoins (sinon).
  • 02
    On identifie le palier pertinent : premier périmètre / complet / fédéré.
  • 03
    Estimation chiffrée envoyée sous 24 h. Si ce n'est pas pour moi, je vous oriente.