Communitygithub.com

Conception d'API

Utilisez cette compétence lors de la conception ou de la révision d'API — REST, GraphQL, tRPC ou gRPC. Déclencheurs : conception d'API, REST, GraphQL, tRPC, gRPC, endpoint, schéma, route, OpenAPI, Swagger, versionnage d'API, pagination, contrat d'API, méthodes HTTP.

Qu'est-ce que Conception d'API ?

Cette compétence, appelée `Conception d'API`, est un guide complet destiné aux développeurs et aux agents IA pour concevoir, documenter et réviser des API de manière cohérente et efficace. Elle couvre les quatre principaux types d'API : REST, GraphQL, tRPC et gRPC, aidant à choisir le bon type en fonction du contexte du projet. Elle détaille les bonnes pratiques pour REST (conventions d'URL, codes de statut HTTP, enveloppe de réponse), les principes de conception généraux (stratégie de versionnage, pagination, filtrage, idempotence), et les règles pour GraphQL (schéma, connexions) ainsi qu'une liste de vérification de sécurité. La compétence est conçue pour être utilisée avec des outils comme Claude Code, Cursor ou Codex, en répondant à des mots-clés spécifiques (API design, REST, GraphQL, endpoint, etc.). Elle fonctionne en fournissant un fichier SKILL.md structuré que l'agent IA charge pour guider ses réponses, garantissant une qualité de conception et de révision d'API conforme aux standards de l'industrie.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jakirhussainkhan/dev-skills/tree/HEAD/.github/skills/api-design

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Conception d'API ?

Choisir le bon type d'API

TypeIdéal pourÉviter quand
RESTAPI publiques, CRUD, clients simples, IoTDonnées imbriquées complexes, itération rapide du schéma
GraphQLApplications mobiles, données imbriquées complexes, clients multiplesCRUD simples, petites équipes novices
tRPCMonorepos TypeScript, API internes full-stack TSClients non-TypeScript, API publiques
gRPCCommunications microservices haute performance, streamingClients navigateurs, cas d'usage simples

Conception d'API REST

Conventions d'URL

GET    /users              ← liste
GET    /users/{id}         ← élément unique
POST   /users              ← création
PUT    /users/{id}         ← remplacement
PATCH  /users/{id}         ← mise à jour partielle
DELETE /users/{id}         ← suppression

# Ressources imbriquées
GET    /users/{id}/orders
POST   /users/{id}/orders

# Actions (quand les verbes REST ne suffisent pas)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

Codes de statut HTTP

CodeUtilisation
200GET, PUT, PATCH réussis
201POST réussi avec création
204DELETE réussi (sans corps)
400Échec de validation, mauvaise requête
401Authentification manquante/invalide
403Authentifié mais non autorisé
404Ressource non trouvée
409Conflit (doublon, incohérence de version)
422Entité non traitable (erreurs sémantiques)
429Limite de débit dépassée
500Erreur serveur inattendue

Enveloppe de réponse

// Collection
{
  "data": [...],
  "meta": { "total": 100, "page": 1, "perPage": 20 }
}

// Ressource unique
{ "data": { "id": "1", "name": "James" } }

// Erreur
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "La validation a échoué",
    "details": [{ "field": "email", "issue": "Format invalide" }]
  }
}

Principes de conception d'API

Stratégie de versionnage

# Versionnage dans l'URL (le plus visible, le plus simple à router)
/v1/utilisateurs
/v2/utilisateurs

# Versionnage par en-tête (URL plus propres)
Accept: application/vnd.api+json;version=2

Ne jamais casser les clients existants. Déprécier, puis supprimer.

Pagination

# Décalage (simple, adapté aux petits ensembles de données)
GET /articles?page=2&perPage=20

# Curseur (rapide pour les grands ensembles, idéal pour le défilement infini)
GET /articles?cursor=eyJpZCI6MTAwfQ&limit=20

Filtrage et tri

GET /commandes?status=en_attente&userId=123
GET /produits?sort=-prix,nom    # préfixe - = ordre décroissant
GET /produits?fields=id,nom,prix  # jeux de champs restreints

Idempotence

# Inclure une clé d'idempotence pour les opérations non idempotentes
POST /paiements
Idempotency-Key: uuid-unique-genere-par-client

Conception GraphQL

Règles de conception du schéma

  • Décrire le domaine métier, pas la structure de la base de données
  • Utiliser le modèle de connexions pour les listes (prêt pour la pagination)
  • Les mutations renvoient l'objet modifié
  • Utiliser des énumérations pour les ensembles de valeurs finis
  • Ajouter des descriptions à tous les types et champs
type Query {
  utilisateur(id: ID!): Utilisateur
  utilisateurs(filtre: FiltreUtilisateur, pagination: PaginationInput): ConnexionUtilisateur!
}

type Mutation {
  creerUtilisateur(entree: EntreeCreerUtilisateur!): PayloadCreerUtilisateur!
  mettreAJourUtilisateur(id: ID!, entree: EntreeMettreAJourUtilisateur!): PayloadMettreAJourUtilisateur!
}

type ConnexionUtilisateur {
  aretes: [AreteUtilisateur!]!
  pageInfo: InfoPage!
  nombreTotal: Int!
}

Liste de vérification de sécurité d'API

  • Tous les endpoints nécessitent une authentification (sauf explicite publique)
  • Autorisation vérifiée par ressource, pas seulement par route
  • Limitation de débit sur tous les endpoints, plus stricte sur les endpoints d'authentification
  • Validation des entrées sur chaque paramètre et champ du corps
  • Les données sensibles ne sont pas renvoyées sauf nécessité explicite
  • CORS configuré avec une liste blanche explicite
  • Stratégie de versionnage d'API définie avant de devenir publique

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés