Génération Swagger/OpenAPI pour TypeScript : automatisation de la création de clients API
\nLors du développement d'applications web modernes en TypeScript, on rencontre souvent le besoin d'intégrer une API REST décrite via des spécifications OpenAPI (anciennement connues sous le nom de Swagger). L'écriture manuelle des types, des interfaces et du code client prend non seulement beaucoup de temps, mais est également source d'erreurs, surtout lors de modifications du backend. Des outils de génération automatique de code TypeScript à partir de spécifications OpenAPI viennent à la rescousse. Dans cet article, nous examinerons trois solutions les plus populaires : openapi-typescript, orval et swagger-typescript-api, et comparerons leurs fonctionnalités.
\n\nPourquoi générer du TypeScript à partir d'OpenAPI ?
\nL'objectif principal est la synchronisation des types et du code client entre le frontend et le backend. Avantages de la génération automatique :
\n- \n
- Sécurité des types : Tous les endpoints, paramètres de requête et réponses reçoivent des types TypeScript stricts. \n
- Actualité : Lorsque la spécification change, il suffit de régénérer le code, sans modifications manuelles. \n
- Accélération du développement : Le développeur obtient des fonctions prêtes à l'emploi pour appeler l'API avec l'auto-complétion (IntelliSense). \n
- Minimisation des erreurs : Les fautes de frappe dans les noms de champs et les incohérences de types sont éliminées. \n
openapi-typescript
\nLa bibliothèque openapi-typescript (des créateurs de openapi-fetch) est un générateur de types léger. Elle crée uniquement des interfaces et des types TypeScript, sans générer de code client pour les appels API. C'est un choix idéal pour les projets où l'on souhaite typer strictement les données, mais où la méthode d'appel API reste à la discrétion du développeur (par exemple, via fetch ou axios).
Installation :
\nnpm install -D openapi-typescript\nExemple d'utilisation (génération de types à partir du fichier spec.yaml) :
\nnpx openapi-typescript ./spec.yaml -o ./types/api.ts\nLe résultat est un fichier avec des types qui peuvent être importés :
\nimport type { paths } from './types/api';\n\n// Type pour la réponse de GET /users\ntype UsersResponse = paths['/users']['get']['responses'][200]['content']['application/json'];\nAvantages : Minimalisme, génération rapide, excellente prise en charge des schémas complexes (allOf, oneOf).
\nInconvénients : Pas de fonctions prêtes à l'emploi pour appeler l'API, nécessite une couche d'abstraction supplémentaire.
orval
\nOrval est un générateur puissant qui crée non seulement des types, mais aussi des hooks React entièrement fonctionnels, ainsi que des clients pour axios, fetch ou Angular. Il est particulièrement utile dans les projets React utilisant React Query (TanStack Query).
Installation :
\nnpm install -D orval\nConfiguration dans le fichier orval.config.ts :
export default {\n petstore: {\n input: './swagger.yaml',\n output: {\n target: './src/generated',\n client: 'react-query', // ou 'axios', 'fetch', 'angular'\n },\n },\n};\nLancement de la génération :
\nnpx orval\nExemple de hook généré :
\nimport { useGetUsers } from './src/generated/users';\n\nfunction UsersList() {\n const { data, isLoading, error } = useGetUsers();\n // data sera typé automatiquement\n}\nAvantages : Intégration prête avec React Query, prise en charge des mutations, gestion automatique du cache.
\nInconvénients : Volume important de code généré, dépendance à un client HTTP spécifique.
swagger-typescript-api
\nLa bibliothèque swagger-typescript-api offre une génération flexible : on peut obtenir à la fois des types simples et un client API complet avec prise en charge de différents clients HTTP (axios, fetch). Sa particularité est la possibilité de personnaliser les modèles de génération.
Installation :
\n<Aussi dans la bibliothèque
Bibliothèque WebSocket Ratchet pour PHP : création en temps réel sur le site
Mise en cache en Swift (iOS/macOS) : Redis, NSCache et autres solutions
Bibliothèques GraphQL TypeScript : Guide complet pour choisir et utiliser
SwiftConfig: Gestion de configuration d'applications en Swift
Traitement JSON en C++ : bibliothèques, analyse et sérialisation de données