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:
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:
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
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:
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.
Curs de GraphQL
Mòdul 1: Introducció a GraphQL
- Què és GraphQL?
- GraphQL vs REST
- Configuració d'un servidor GraphQL
- Conceptes bàsics de l'esquema de GraphQL
Mòdul 2: Conceptes bàsics
Mòdul 3: Disseny avançat d'esquemes
Mòdul 4: Treballant amb dades
- Connexió a una base de dades
- Estratègies de recuperació de dades
- Agrupació i emmagatzematge en memòria cau
- Gestió d'errors
Mòdul 5: Rendiment i seguretat
Mòdul 6: Eines i ecosistema
Mòdul 7: Proves i desplegament
- Proves unitàries de resolvers
- Proves d'integració
- Integració contínua
- Desplegament de servidors GraphQL