Guides

Comment créer une API REST : conception, sécurité et déploiement

Pour créer une API REST, établissez la liste des ressources que gère votre app (utilisateurs, commandes, réservations), attribuez à chacune une URL comme /orders et /orders/{id}, puis utilisez les méthodes HTTP pour les actions : GET pour lire, POST pour créer, PATCH pour modifier, DELETE pour supprimer. Renvoyez du JSON avec des codes d'état clairs, validez chaque entrée, exigez une authentification et des vérifications de permission par enregistrement côté serveur, et paginez les listes. Documentez ensuite les points d'accès et déployez l'API derrière HTTPS.

Ce guide couvre les décisions de conception, un ensemble de routes concret, des prompts pour un créateur d'apps par IA et les erreurs qui créent des failles de sécurité. Si les API sont nouvelles pour vous, commencez par ce qu'est une API.

Quand vous avez besoin d'une API REST

  • Votre interface web doit enregistrer et charger des données depuis un serveur
  • Une app mobile, un partenaire ou un outil d'automatisation doit accéder à vos données
  • D'autres services vous envoient des événements (webhooks)
  • Vous répartissez le travail entre une équipe frontend et une équipe backend

REST est le style le plus courant, mais ce n'est pas le seul. REST ou GraphQL explique quand un point d'accès de requête unique et flexible convient mieux.

Concevoir d'abord : ressources et routes

Écrivez les noms de votre app et ce que les gens font avec eux. Pour une simple app de réservation :

MéthodeRouteCe qu'elle faitCode de succès
GET/api/bookingsListe les réservations de l'appelant (paginée)200
POST/api/bookingsCrée une réservation201
GET/api/bookings/{id}Renvoie une réservation200
PATCH/api/bookings/{id}Modifie certains champs200
DELETE/api/bookings/{id}Annule une réservation204
GET/api/healthContrôle de santé pour la surveillance200

Ces routes correspondent à créer, lire, modifier et supprimer ; voir ce qu'est le CRUD. Conventions utiles à suivre :

  • Noms au pluriel, sans verbes dans les URL : /bookings, pas /getBookings.
  • N'imbriquez qu'un niveau lorsque cela clarifie la propriété : /bookings/{id}/notes.
  • Les actions qui ne relèvent pas du CRUD peuvent être des sous-ressources : POST /bookings/{id}/cancel est plus clair qu'un PATCH « magique ».
  • Un nommage cohérent des champs, comme created_at partout.

Codes d'état et erreurs

Utilisez les codes HTTP standard pour que les clients sachent ce qui s'est passé sans analyser de texte :

CodeSignificationQuand l'utiliser
200OKLecture ou modification réussie
201CreatedUn POST a créé quelque chose
204No ContentSuccès sans rien à renvoyer
400Bad RequestLes données ne passent pas la validation
401UnauthorizedNon connecté ou jeton invalide
403ForbiddenConnecté, mais non autorisé
404Not FoundN'existe pas, ou l'appelant ne doit pas savoir qu'il existe
409ConflictDoublon, ou le créneau est déjà réservé
429Too Many RequestsLimite de débit atteinte
500Server ErrorQuelque chose a planté de votre côté

Renvoyez les erreurs dans une seule forme JSON cohérente, par exemple {"error": {"code": "slot_taken", "message": "Ce moment n'est plus disponible."}}, et n'incluez jamais de traces d'appel ni d'erreurs de base de données dans les réponses.

Options et compromis

DécisionChoix simpleAlternative
Où vit l'APIRoutes d'API dans le framework de votre site webUn service d'API séparé, utile pour plusieurs clients ou un autre langage
AuthentificationCookies de session pour votre propre app webJetons (bearer tokens ou clés API) pour les apps mobiles et les tiers
Pagination?page=2&limit=20Par curseur (?after=...), plus stable pour les grandes listes qui changent
VersionnementAucun tant que personne d'extérieur ne l'utilise/v1/ dans le chemin, une fois que d'autres en dépendent
DocumentationUn README qui liste les routesUne spécification OpenAPI, que des outils transforment en documentation interactive et en code client

Étape par étape

  1. Listez les ressources et les routes comme ci-dessus, y compris qui peut appeler chacune.
  2. Modélisez les données dans votre base de données, avec les champs et les relations nécessaires.
  3. Construisez d'abord les routes de lecture, puis celles de création, de modification et de suppression.
  4. Validez les entrées sur chaque écriture avec une bibliothèque de schémas : champs obligatoires, types, longueurs, valeurs autorisées. Rejetez les champs inconnus.
  5. Ajoutez l'authentification, puis l'autorisation par enregistrement : charger /bookings/42 doit vérifier que la réservation 42 appartient à l'appelant, et pas seulement qu'une personne est connectée.
  6. Paginez chaque liste et plafonnez la taille des pages.
  7. Limitez le débit des connexions et des routes coûteuses. Voir la limitation de débit.
  8. Configurez CORS uniquement si des navigateurs d'autres domaines doivent appeler l'API, et listez explicitement ces origines. Corriger les erreurs CORS explique les erreurs que vous verrez.
  9. Rédigez la documentation et les tests de chaque route, y compris les cas d'échec.
  10. Déployez avec les secrets dans des variables d'environnement, HTTPS, des journaux et un contrôle de santé.

Prompts à donner à votre créateur d'apps par IA

Structure de base :

Crée une API REST pour les réservations avec ces routes : GET /api/health, GET /api/bookings (paginée, 50 par page au maximum), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Enregistre les données dans notre base de données. Valide les corps de requête avec une bibliothèque de schémas et rejette les champs inconnus. Renvoie les erreurs en JSON sous la forme {"error": {"code", "message"}} avec les bons codes d'état (400, 401, 403, 404, 409). Garde les secrets dans des variables d'environnement.

Sécurité :

Exige une connexion sur chaque route des réservations. Pour chaque lecture, modification et suppression, vérifie côté serveur que la réservation appartient à l'utilisateur actuel ; renvoie 404 si ce n'est pas le cas. N'accepte jamais d'identifiants d'utilisateur ni de rôles dans le corps de la requête. Limite POST /api/bookings à 20 par minute et par utilisateur. Journalise les erreurs sur le serveur sans renvoyer de traces d'appel.

Documentation :

Rédige une description OpenAPI de ces routes, ainsi qu'un court README avec des exemples de requêtes et de réponses pour chacune.

Tester votre API

Testez depuis l'extérieur du frontend, car des attaquants le feront :

  • Chaque route fonctionne avec des données valides et renvoie la forme et le code documentés
  • Les champs manquants ou invalides renvoient 400 avec un message clair
  • L'absence de jeton renvoie 401 sur chaque route protégée
  • L'utilisateur A qui demande l'enregistrement de l'utilisateur B par son ID reçoit 404 ou 403
  • Les listes sont paginées ; une valeur limit énorme est plafonnée
  • Les créations en double ou en conflit renvoient 409, et non 500
  • Les limites de débit renvoient 429
  • Les réponses d'erreur ne contiennent aucune trace d'appel, aucune requête SQL ni aucun secret
  • CORS n'autorise que les origines que vous voulez

Erreurs courantes

  • Vérifier la connexion sans vérifier la propriété. La faille la plus fréquente dans une API : n'importe quel utilisateur connecté peut lire n'importe quel enregistrement en changeant l'ID.
  • Faire confiance au client. Les prix, les rôles et les identifiants d'utilisateur envoyés dans le corps de la requête peuvent être modifiés.
  • Renvoyer des lignes entières de la base de données. Les hachages de mots de passe et les champs internes fuient. Choisissez ce que chaque réponse contient.
  • Des listes sans limite. Une seule requête pour chaque enregistrement peut ralentir toute l'app.
  • Un 200 OK avec un message d'erreur à l'intérieur. Les clients et la surveillance ne peuvent pas savoir que ça a échoué.
  • CORS configuré pour tout autoriser sur une API qui utilise des cookies.
  • Aucun contrôle de santé ni aucun journal, si bien que vous apprenez les pannes par les utilisateurs.

Pour une vérification plus large avant le lancement, consultez la liste de contrôle de sécurité pour les apps créées avec l'IA.

Construire une API REST dans Mythex

Vous pouvez demander à Mythex une API dans le cadre de votre app ou comme service distinct. La recette de la documentation backend d'API REST propose un prompt de départ : nommez votre framework et vos routes, demandez des erreurs JSON claires, gardez les secrets dans des variables d'environnement et incluez un Dockerfile. Les backends conteneurisés en Node, Python, C#, Java et autres se publient avec un Dockerfile, et Mythex gère le déploiement depuis Publish (backends d'API). Un projet peut faire tourner un site web et un serveur d'API côte à côte, et vous pouvez basculer entre les deux dans l'aperçu. Conservez les clés comme secrets du projet, et si l'API a besoin d'une base de données, demandez-la dans le chat. Pour le travail planifié autour de votre API, voir comment exécuter des tâches en arrière-plan.

Questions

Qu'est-ce qu'une API REST ?

Une API REST permet à des programmes de travailler avec les données de votre app via HTTP. Chaque type de donnée est une ressource avec sa propre URL, comme /orders, et des méthodes standard agissent dessus : GET pour lire, POST pour créer, PATCH ou PUT pour modifier, et DELETE pour supprimer. Les données sont généralement échangées en JSON.

Dans quel langage dois-je construire une API REST ?

Choisissez celui que vous ou votre équipe pouvez maintenir. Node.js avec Express ou Fastify, Python avec FastAPI, et les frameworks C# ou Java fonctionnent tous très bien. Les règles de conception des routes, des codes d'état, de la validation et de l'authentification comptent davantage que le langage.

Comment sécuriser une API REST ?

Exigez une authentification sur chaque route non publique, vérifiez côté serveur que l'appelant a le droit d'accéder à chaque enregistrement précis, validez toutes les entrées, utilisez HTTPS, limitez le nombre de requêtes et gardez les secrets dans des variables d'environnement. Ne faites jamais confiance aux identifiants ou aux rôles envoyés par le client.

Ai-je besoin d'un backend séparé pour une API REST ?

Pas toujours. Des frameworks comme Next.js peuvent servir des routes d'API à côté des pages. Un service d'API séparé a du sens lorsque plusieurs clients (web, mobile, partenaires) l'utilisent, ou lorsqu'il a besoin de son propre langage ou de sa propre mise à l'échelle.

Mythex · Pricing · Créez n'importe quoi avec l'IA · Modèles de sites web et d'applications · Mythex comparé · Glossaire de la création d'applications avec l'IA · Outils gratuits pour créer des applications avec l'IA · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)