En aquest tema, explorarem les diferències entre GraphQL i REST, dues tecnologies populars per a la construcció d'API. Entendre aquestes diferències és crucial per decidir quina tecnologia utilitzar en els teus projectes.
Què és REST?
REST (Representational State Transfer) és un estil arquitectònic per a la creació de serveis web. Utilitza HTTP per a la comunicació i es basa en recursos identificats per URL. Les operacions principals de REST són:
- GET: Recuperar dades d'un recurs.
- POST: Crear un nou recurs.
- PUT: Actualitzar un recurs existent.
- DELETE: Eliminar un recurs.
Característiques de REST
- Estatless: Cada petició del client al servidor ha de contenir tota la informació necessària per entendre la petició.
- Caché: Les respostes poden ser emmagatzemades en memòria cau per millorar el rendiment.
- Interfície uniforme: Utilitza un conjunt d'operacions estàndard (GET, POST, PUT, DELETE).
Què és GraphQL?
GraphQL és un llenguatge de consulta per a API desenvolupat per Facebook. Permet als clients sol·licitar exactament les dades que necessiten, i res més. Les operacions principals de GraphQL són:
- Query: Recuperar dades.
- Mutation: Modificar dades.
- Subscription: Rebre actualitzacions en temps real.
Característiques de GraphQL
- Tipat fort: L'esquema de GraphQL defineix els tipus de dades i les relacions entre ells.
- Flexibilitat en les consultes: Els clients poden especificar exactament quines dades necessiten.
- Una sola URL: Totes les operacions es fan a través d'una única URL d'endpoint.
Comparació entre GraphQL i REST
Flexibilitat en les Consultes
Característica | REST | GraphQL |
---|---|---|
Consultes | Les respostes són predefinides i sovint contenen més dades de les necessàries. | Els clients poden especificar exactament quines dades necessiten. |
Endpoints | Cada recurs té el seu propi endpoint. | Un sol endpoint per a totes les operacions. |
Eficiència en la Transferència de Dades
Característica | REST | GraphQL |
---|---|---|
Overfetching | Sovint es recuperen més dades de les necessàries. | Els clients només reben les dades que sol·liciten. |
Underfetching | Pot requerir múltiples peticions per obtenir totes les dades necessàries. | Una sola petició pot recuperar totes les dades necessàries. |
Evolució de l'API
Característica | REST | GraphQL |
---|---|---|
Versió de l'API | Sovint es necessiten noves versions de l'API per a canvis significatius. | L'esquema es pot evolucionar sense trencar les consultes existents. |
Rendiment
Característica | REST | GraphQL |
---|---|---|
Rendiment | Pot ser menys eficient degut a l'overfetching i underfetching. | Pot ser més eficient ja que només es transfereixen les dades necessàries. |
Exemple Pràctic
REST
Imagina que tens una API REST per a una aplicació de llibres. Per obtenir informació sobre un llibre i el seu autor, podries necessitar dues peticions:
-
Obtenir el llibre:
GET /books/1
Resposta:
{ "id": 1, "title": "El nom del vent", "authorId": 10 }
-
Obtenir l'autor:
GET /authors/10
Resposta:
{ "id": 10, "name": "Patrick Rothfuss" }
GraphQL
Amb GraphQL, pots obtenir tota la informació en una sola petició:
Resposta:
Exercici Pràctic
Exercici
- Crea una API REST que permeti obtenir informació sobre llibres i autors.
- Crea una API GraphQL que permeti obtenir la mateixa informació.
Solució
API REST
-
Endpoint per obtenir un llibre:
GET /books/:id
-
Endpoint per obtenir un autor:
GET /authors/:id
API GraphQL
-
Definició de l'esquema:
type Book { id: ID! title: String! author: Author! } type Author { id: ID! name: String! } type Query { book(id: ID!): Book }
-
Resolver per a la consulta:
const resolvers = { Query: { book: (parent, args, context, info) => { // Implementació per obtenir el llibre i l'autor } }, Book: { author: (parent, args, context, info) => { // Implementació per obtenir l'autor del llibre } } };
Conclusió
GraphQL i REST tenen els seus propis avantatges i inconvenients. REST és senzill i ben establert, mentre que GraphQL ofereix més flexibilitat i eficiència en la transferència de dades. La decisió de quina tecnologia utilitzar dependrà dels requisits específics del teu projecte.
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