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:

  1. Obtenir el llibre:

    GET /books/1
    

    Resposta:

    {
      "id": 1,
      "title": "El nom del vent",
      "authorId": 10
    }
    
  2. Obtenir l'autor:

    GET /authors/10
    

    Resposta:

    {
      "id": 10,
      "name": "Patrick Rothfuss"
    }
    

GraphQL

Amb GraphQL, pots obtenir tota la informació en una sola petició:

query {
  book(id: 1) {
    title
    author {
      name
    }
  }
}

Resposta:

{
  "data": {
    "book": {
      "title": "El nom del vent",
      "author": {
        "name": "Patrick Rothfuss"
      }
    }
  }
}

Exercici Pràctic

Exercici

  1. Crea una API REST que permeti obtenir informació sobre llibres i autors.
  2. Crea una API GraphQL que permeti obtenir la mateixa informació.

Solució

API REST

  1. Endpoint per obtenir un llibre:

    GET /books/:id
    
  2. Endpoint per obtenir un autor:

    GET /authors/:id
    

API GraphQL

  1. Definició de l'esquema:

    type Book {
      id: ID!
      title: String!
      author: Author!
    }
    
    type Author {
      id: ID!
      name: String!
    }
    
    type Query {
      book(id: ID!): Book
    }
    
  2. 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.

© Copyright 2024. Tots els drets reservats