Sobes.tech
Junior

¿Qué es GraphQL?

sobes.tech AI

Respuesta de la IA

GraphQL es un lenguaje de consultas para APIs y un entorno de ejecución para realizar esas consultas a tus datos. Ofrece una alternativa a REST, permitiendo al cliente solicitar solo los datos que necesita, en una sola consulta.

Conceptos clave:

  1. Esquema: Define los tipos de datos disponibles en la API, sus relaciones y las operaciones disponibles (consultas, mutaciones, suscripciones).
  2. Consultas (Queries): Se usan para leer datos. El cliente indica qué campos necesita.
  3. Mutaciones (Mutations): Se usan para modificar datos (crear, actualizar, eliminar).
  4. Suscripciones (Subscriptions): Se usan para recibir datos en tiempo real a través de una conexión persistente (por ejemplo, WebSocket).

Ejemplo de consulta:

query GetUserData {
  user(id: "123") {
    name
    email
    posts {
      title
    }
  }
}

La respuesta a esta consulta podría ser así:

{
  "data": {
    "user": {
      "name": "Ivan",
      "email": "ivan@example.com",
      "posts": [
        { "title": "Mi primer artículo" },
        { "title": "Sobre GraphQL" }
      ]
    }
  }
}

Ventajas sobre REST:

  • Evitar la sobrecarga de datos (Over-fetching): El cliente recibe solo los campos solicitados.
  • Evitar la subcarga de datos (Under-fetching) / Múltiples consultas: A menudo permite obtener toda la información necesaria en una sola consulta, a diferencia de REST, donde puede ser necesario realizar varias solicitudes a diferentes endpoints.
  • Tipificación fuerte: El esquema proporciona documentación clara y validación de consultas.
  • Mejor rendimiento: Menor volumen de datos transmitidos.
  • Flexibilidad en el lado del cliente: Los clientes pueden evolucionar independientemente del servidor, solicitando datos según sea necesario.

Desventajas:

  • Complejidad en la configuración del lado del servidor.
  • Problemas con el almacenamiento en caché en comparación con los métodos estándar de caché REST (por ejemplo, a nivel HTTP).
  • Es más difícil manejar errores en comparación con REST (que utiliza códigos de estado HTTP estándar).