Développement d’API
Une API est un contrat produit. Ressources, auth, erreurs et versions pour que mobile, dashboards et partenaires partagent un backend sans surprises.
Le versioning existe pour qu'un changement cassant pour les besoins d'un client ne casse pas silencieusement tous les autres. Les erreurs renvoient une forme cohérente — un code sur lequel un client peut brancher sa logique, pas juste un message lisible par un humain — parce qu'une app mobile et un dashboard doivent tous deux gérer l'échec de façon programmatique, pas seulement l'afficher.
Limites de débit et authentification sont conçues autour de qui appelle réellement l'API — un dashboard maison, une app mobile avec un flux de refresh-token, ou une intégration partenaire par clés API — plutôt qu'une politique unique pour tout le monde. Les endpoints pixel et redirection d'un système de tracking e-mail en sont la version extrême : sans authentification par conception, puisqu'ils sont sur le chemin de chaque ouverture d'e-mail suivie, mais conscients du débit pour qu'un pic de trafic sur une campagne ne dégrade pas les autres.
La documentation est écrite pour l'équipe qui doit consommer l'API, pas générée après coup — endpoints, payloads attendus et formes d'erreur qu'un développeur frontend ou mobile peut utiliser sans rétro-ingénierie du backend.
Problèmes métier
- Mobile, dashboard et partenaires chacun sur un backend différent, si bien que la même règle métier — une remise, une vérification de droits — s'implémente trois fois et diverge.
- Une API sans stratégie de versioning, si bien que chaque client est en permanence à un déploiement de la casse.
- Une API sans aucune limite de débit, si bien qu'un client qui se comporte mal ou une boucle de retry d'une intégration partenaire peut faire tomber le backend pour tout le monde.
- Une logique d'authentification dupliquée sur les endpoints au lieu d'être centralisée, si bien qu'un correctif de sécurité doit être appliqué à une douzaine d'endroits et en rate inévitablement un.
- Aucun environnement de staging ou de sandbox pour que les partenaires testent, si bien que la première tentative d'intégration d'un partenaire se fait directement sur des données de production.
- Aucune convention cohérente de nommage ou de forme entre les endpoints, si bien qu'un client doit apprendre un motif légèrement différent pour chaque ressource au lieu d'un seul motif valable partout.
- Des clés API à durée de vie illimitée sans expiration ni restriction de portée, si bien qu'une seule clé divulguée donne un accès complet indéfiniment plutôt qu'un accès étroit et limité dans le temps.
Processus de développement
- Ressources, auth, erreurs, versions — un contrat que d'autres équipes tiennent, documenté assez bien pour qu'un nouveau consommateur n'ait pas besoin d'un appel pour comprendre comment l'utiliser.
- Concevoir une fois pour toutes les formes d'erreur et de pagination, en amont, pour que chaque nouvel endpoint suive le même patron plutôt que d'inventer le sien.
- Centraliser l'authentification et l'autorisation dans un middleware, pas dans chaque contrôleur, pour qu'une règle de permission soit définie une fois et appliquée partout de façon cohérente.
- Ajouter limite de débit et logs de requêtes dès le départ, pour qu'un pic de trafic ou un client abusif soit visible et freiné plutôt que de faire tomber l'API.
- Fournir un environnement sandbox avec des données de test réalistes, pour qu'un partenaire puisse construire et tester une intégration sans toucher à la production.
- Choisir une convention de nommage et de forme de réponse pour toute l'API dès le premier jour, et l'appliquer à chaque endpoint suivant, pour qu'une nouvelle ressource soit prévisible avant même de lire sa documentation.
Ce que vous obtenez
- Une API web et mobile stable quand le produit grandit, pour qu'une sortie mobile n'ait pas à suivre le rythme de chaque changement backend.
- Des partenaires et des équipes internes qui construisent sur le même contrat documenté plutôt que de rétro-ingénierer le comportement depuis une collection Postman transférée une fois.
- Une API qui survit à un pic de trafic ou un client qui se comporte mal au lieu de tomber avec lui.
- Des correctifs de sécurité appliqués une fois, dans le middleware, plutôt que traqués sur une douzaine d'endpoints en espérant n'en avoir manqué aucun.
- Des partenaires qui peuvent construire et tester contre un sandbox plutôt que d'expérimenter directement sur des données de production.
- De nouveaux endpoints qui semblent familiers dès qu'un client les voit, parce qu'ils suivent la même convention que tout le reste de l'API.
- Des clés API limitées exactement à ce dont une intégration a besoin et rien de plus, pour qu'une fuite soit un incident contenu plutôt qu'une compromission complète.
- Moins de bugs d'intégration signalés par les partenaires, parce que l'API se comporte pareil partout au lieu de surprendre sur le seul endpoint que personne n'avait testé soigneusement.
Projets choisis
FAQ
REST or GraphQL?
REST for most business products. GraphQL when many clients need very different slices of the same graph. I choose based on the consumers, not fashion.