Communitygithub.com

apollographql/graphql-schema

Guide pour la conception de schémas GraphQL suivant les meilleures pratiques de l'industrie. Utilisez cette compétence lorsque : (1) vous concevez un nouveau schéma ou une API GraphQL, (2) vous examinez un schéma existant pour des améliorations, (3) vous décidez des structures de types ou de la nullabilité, (4) vous implémentez des motifs de pagination ou de gestion d'erreurs, (5) vous assurez la sécurité dans la conception du schéma.

Qu'est-ce que graphql-schema ?

Cette compétence fournit un guide complet pour la conception de schémas GraphQL conformément aux meilleures pratiques de l'industrie, notamment celles préconisées par Apollo. Elle est utile pour les développeurs et les équipes qui conçoivent de nouvelles API GraphQL, révisent des schémas existants, doivent choisir entre types obligatoires ou optionnels, ou mettent en place des motifs avancés comme la pagination et la gestion d'erreurs. La compétence couvre également les aspects de sécurité essentiels pour éviter les failles courantes. Elle prend en charge les environnements de développement GraphQL génériques ainsi que les outils Apollo, et son SKILL.md détaille les principes de nommage, les types scalaires, les unions, les interfaces, l'utilisation de champs non-nullables, les directives de pagination, et les bonnes pratiques pour les erreurs et l'authentification.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/apollographql/skills/tree/main/skills/graphql-schema

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 graphql-schema ?

Guide pour la conception de schémas GraphQL suivant les meilleures pratiques de l'industrie. Utilisez cette compétence lorsque : (1) vous concevez un nouveau schéma ou une API GraphQL, (2) vous examinez un schéma existant pour des améliorations, (3) vous décidez des structures de types ou de la nullabilité, (4) vous implémentez des motifs de pagination ou de gestion d'erreurs, (5) vous assurez la sécurité dans la conception du schéma.

Principes de base

  • Utilisez des noms de types en PascalCase et des noms de champs en camelCase.
  • Privilégiez les types scalaires personnalisés (DateTime, JSON, URL) pour la clarté.
  • Évitez les types String génériques ; utilisez des énumérations ou des scalaires spécifiques lorsque c'est possible.

Nullabilité

  • Par défaut, les champs doivent être non-nullables (!) dans le retour de requête pour éviter des surprises.
  • Utilisez la nullabilité (String, Int) uniquement lorsque l'absence de donnée a une signification métier.
  • Pour les listes, préférez [Type]! (liste non-nullable, éléments nullables) à [Type!]! (liste et éléments non-nullables) si les éléments peuvent manquer.

Pagination

  • Implémentez la pagination basée sur des curseurs selon la spécification Relay Connection.
  • Utilisez les types Connection et Edge pour chaque association paginée.
  • Exemple :
type Query {
  users(first: Int, after: String): UserConnection
}

type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
}

type UserEdge {
  cursor: String!
  node: User!
}

type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}

Gestion d'erreurs

  • Utilisez un type Error unifié avec un champ message et code, et intégrez-le dans vos résultats via des unions.
  • Exemple :
union UserResult = User | UserNotFoundError | UnauthorizedError

type UserNotFoundError {
  message: String!
  code: String!
}

type UnauthorizedError {
  message: String!
  code: String!
}

Sécurité

  • Appliquez des validations d'entrée et d'autorisation au niveau des résolveurs.
  • Limitez la profondeur des requêtes et la taille des réponses.
  • Utilisez des directives personnalisées pour la gestion des permissions (ex. @auth, @rateLimit).

Types et interfaces

  • Préférez les interfaces pour les objets partageant des champs communs, et les unions pour des types complètement différents.
  • Exemple d'interface :
interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
  name: String!
  email: String!
}

Directives recommandées

  • @deprecated(reason: String!) pour marquer des champs obsolètes.
  • @specifiedBy(url: String!) pour les scalaires personnalisés.
  • Évitez les directives propriétaires non documentées.

Ressources supplémentaires

Individual skills in this repo

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

apollographql/apollo-client

Guide for building React applications with Apollo Client 4.x. Use this skill when: (1) setting up Apollo Client in a React project, (2) writing GraphQL queries or mutations with hooks, (3) configuring caching or cache policies, (4) managing local state with reactive variables, (5) troubleshooting Apollo Client errors or performance issues.

apollographql/apollo-connectors

Guide for integrating REST APIs into GraphQL supergraphs using Apollo Connectors with @source and @connect directives. Use this skill when the user: (1) mentions "connectors", "Apollo Connectors", or "REST Connector", (2) wants to integrate a REST API into GraphQL, (3) references @source or @connect directives, (4) works with files containing "# Note to AI Friends: This is an Apollo Connectors schema".

apollographql/apollo-federation

Guide for authoring Apollo Federation subgraph schemas. Use this skill when: (1) creating new subgraph schemas for a federated supergraph, (2) defining or modifying entities with @key, (3) sharing types/fields across subgraphs with @shareable, (4) working with federation directives (@external, @requires, @provides, @override, @inaccessible), (5) troubleshooting composition errors, (6) any task involving federation schema design patterns.

apollographql/apollo-mcp-server

Guide for using Apollo MCP Server to connect AI agents with GraphQL APIs. Use this skill when: (1) setting up or configuring Apollo MCP Server, (2) defining MCP tools from GraphQL operations, (3) using introspection tools (introspect, search, validate, execute), (4) troubleshooting MCP server connectivity or tool execution issues.

apollographql/apollo-router

Version-aware guide for configuring and running Apollo Router for federated GraphQL supergraphs. Generates correct YAML for both Router v1.x and v2.x. Use this skill when: (1) setting up Apollo Router to run a supergraph, (2) configuring routing, headers, or CORS, (3) implementing custom plugins (Rhai scripts or coprocessors), (4) configuring telemetry (tracing, metrics, logging), (5) troubleshooting Router performance or connectivity issues.

apollographql/apollo-server

Guide for building GraphQL servers with Apollo Server 5.x. Use this skill when: (1) setting up a new Apollo Server project, (2) writing resolvers or defining GraphQL schemas, (3) implementing authentication or authorization, (4) creating plugins or custom data sources, (5) troubleshooting Apollo Server errors or performance issues.

apollographql/graphql-operations

Guide for writing GraphQL operations (queries, mutations, fragments) following best practices. Use this skill when: (1) writing GraphQL queries or mutations, (2) organizing operations with fragments, (3) optimizing data fetching patterns, (4) setting up type generation or linting, (5) reviewing operations for efficiency.

apollographql/rover

Guide for using Apollo Rover CLI to manage GraphQL schemas and federation. Use this skill when: (1) publishing or fetching subgraph/graph schemas, (2) composing supergraph schemas locally or via GraphOS, (3) running local supergraph development with rover dev, (4) validating schemas with check and lint commands, (5) configuring Rover authentication and environment, (6) exploring or searching a graph's schema for agent-driven discovery (rover schema describe / rover schema search).

apollographql/rust-best-practices

Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook. Use this skill when: (1) writing new Rust code or functions, (2) reviewing or refactoring existing Rust code, (3) deciding between borrowing vs cloning or ownership patterns, (4) implementing error handling with Result types, (5) optimizing Rust code for performance, (6) writing tests or documentation for Rust projects.

Skills associés