GraphQL és un llenguatge de consulta per a APIs i un entorn d'execució per a les consultes amb les dades existents. Va ser desenvolupat internament per Facebook el 2012 i es va fer públic el 2015. GraphQL proporciona una manera més eficient, potent i flexible de treballar amb APIs en comparació amb les arquitectures REST tradicionals.
Conceptes Clau de GraphQL
- Llenguatge de Consulta
GraphQL permet als clients sol·licitar exactament les dades que necessiten, ni més ni menys. Això es fa mitjançant un llenguatge de consulta específic que permet definir les estructures de dades desitjades.
- Esquema Fortament Tipat
GraphQL utilitza un esquema fortament tipat per definir les capacitats de l'API. L'esquema especifica els tipus d'objectes disponibles, així com les relacions entre ells.
- Consultes i Mutacions
- Consultes: S'utilitzen per llegir dades.
- Mutacions: S'utilitzen per escriure dades (crear, actualitzar, eliminar).
- Resolvers
Els resolvers són funcions que gestionen les sol·licituds de dades. Cada camp en una consulta GraphQL està associat amb un resolver que retorna el valor d'aquest camp.
- Tipus de Dades
GraphQL suporta diversos tipus de dades, incloent-hi tipus bàsics (com Int
, Float
, String
, Boolean
i ID
) i tipus complexos (com objectes, llistes i unions).
Avantatges de GraphQL
- Flexibilitat
GraphQL permet als clients sol·licitar exactament les dades que necessiten, reduint la quantitat de dades transferides per la xarxa i millorant el rendiment.
- Evolució de l'API
Amb GraphQL, és més fàcil afegir nous camps i tipus a l'API sense afectar els clients existents. Això facilita l'evolució de l'API amb el temps.
- Documentació Automàtica
L'esquema de GraphQL serveix com a documentació automàtica de l'API. Les eines com GraphiQL i Playground permeten explorar l'API de manera interactiva.
- Tipus Forts
L'ús de tipus forts ajuda a detectar errors abans, durant el desenvolupament, i proporciona una millor experiència de desenvolupament amb eines com l'autocompletat i la validació de tipus.
Comparació amb REST
Característica | GraphQL | REST |
---|---|---|
Flexibilitat | Sol·licita exactament les dades necessàries | Respostes predefinides |
Evolució de l'API | Fàcil d'afegir nous camps i tipus | Pot requerir noves versions de l'API |
Documentació | Automàtica a partir de l'esquema | Manual |
Tipus de Dades | Fortament tipat | Depèn de la implementació |
Consultes | Una sola sol·licitud per múltiples recursos | Múltiples sol·licituds per múltiples recursos |
Exemple Pràctic
A continuació, es mostra un exemple bàsic d'una consulta GraphQL i la seva resposta:
Consulta
Resposta
{ "data": { "user": { "id": "1", "name": "John Doe", "email": "[email protected]" } } }
En aquest exemple, la consulta sol·licita les dades d'un usuari amb un id
específic, i la resposta retorna només els camps id
, name
i email
de l'usuari.
Exercici Pràctic
Exercici 1: Crear una Consulta Bàsica
- Defineix una consulta que sol·liciti les dades d'un llibre (
Book
) amb els campstitle
,author
ipublishedYear
. - Escriu la resposta esperada per a aquesta consulta.
Solució
Consulta
Resposta
{ "data": { "book": { "title": "GraphQL for Beginners", "author": "Jane Smith", "publishedYear": 2021 } } }
Conclusió
GraphQL és una poderosa alternativa a les APIs REST tradicionals, oferint una major flexibilitat, eficiència i una millor experiència de desenvolupament. En els següents mòduls, explorarem més a fons com configurar un servidor GraphQL, els conceptes bàsics de l'esquema, i com realitzar consultes i mutacions.
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