Introducció a les Interfícies de GraphQL

Les interfícies en GraphQL són una característica poderosa que permet definir un conjunt de camps que poden ser implementats per múltiples tipus. Això és especialment útil quan es treballa amb tipus que comparteixen camps comuns, permetent una major flexibilitat i reutilització del codi.

Conceptes Clau

  • Interfície: Una definició de camps que poden ser implementats per diversos tipus.
  • Implementació: Els tipus que implementen una interfície han de definir tots els camps de la interfície.
  • Consulta: Les consultes poden demanar camps de la interfície i especificar fragments per a tipus concrets.

Definició d'una Interfície

Per definir una interfície en GraphQL, utilitzem la paraula clau interface. A continuació es mostra un exemple bàsic:

interface Animal {
  id: ID!
  name: String!
  age: Int
}

En aquest exemple, l'interfície Animal defineix tres camps: id, name i age.

Implementació d'una Interfície

Els tipus que implementen una interfície han de definir tots els camps de la interfície. Aquí tenim dos tipus que implementen la interfície Animal:

type Dog implements Animal {
  id: ID!
  name: String!
  age: Int
  breed: String
}

type Cat implements Animal {
  id: ID!
  name: String!
  age: Int
  livesLeft: Int
}

En aquest exemple, Dog i Cat implementen la interfície Animal i afegeixen els seus propis camps específics (breed per a Dog i livesLeft per a Cat).

Consultes amb Interfícies

Quan es fa una consulta, es poden demanar camps de la interfície i utilitzar fragments per obtenir camps específics dels tipus concrets. Aquí tenim un exemple de consulta:

{
  animals {
    id
    name
    ... on Dog {
      breed
    }
    ... on Cat {
      livesLeft
    }
  }
}

En aquest exemple, la consulta demana els camps id i name de la interfície Animal, i utilitza fragments per obtenir els camps breed de Dog i livesLeft de Cat.

Exemples Pràctics

Definició de l'Esquema

interface Vehicle {
  id: ID!
  make: String!
  model: String!
}

type Car implements Vehicle {
  id: ID!
  make: String!
  model: String!
  numberOfDoors: Int
}

type Motorcycle implements Vehicle {
  id: ID!
  make: String!
  model: String!
  hasSidecar: Boolean
}

type Query {
  vehicles: [Vehicle]
}

Consulta

{
  vehicles {
    id
    make
    model
    ... on Car {
      numberOfDoors
    }
    ... on Motorcycle {
      hasSidecar
    }
  }
}

Exercici Pràctic

Exercici:

Defineix una interfície Person amb els camps id, name i age. Implementa aquesta interfície amb dos tipus: Student i Teacher. Afegeix un camp grade a Student i un camp subject a Teacher. Escriu una consulta que obtingui els camps comuns i els específics de cada tipus.

Solució:

interface Person {
  id: ID!
  name: String!
  age: Int
}

type Student implements Person {
  id: ID!
  name: String!
  age: Int
  grade: String
}

type Teacher implements Person {
  id: ID!
  name: String!
  age: Int
  subject: String
}

type Query {
  people: [Person]
}

Consulta:

{
  people {
    id
    name
    age
    ... on Student {
      grade
    }
    ... on Teacher {
      subject
    }
  }
}

Errors Comuns i Consells

  • Error: No definir tots els camps de la interfície: Quan un tipus implementa una interfície, ha de definir tots els camps de la interfície. Si no ho fa, es produirà un error de validació.
  • Consell: Utilitza fragments per a camps específics: Quan facis consultes, utilitza fragments per obtenir camps específics dels tipus concrets. Això fa que les consultes siguin més clares i mantenibles.

Conclusió

Les interfícies en GraphQL són una eina poderosa per definir camps comuns que poden ser implementats per múltiples tipus. Això permet una major flexibilitat i reutilització del codi. En el proper tema, explorarem les unions, que són una altra característica avançada per treballar amb tipus heterogenis.

© Copyright 2024. Tots els drets reservats