Contenido del curso
Fundamentos de GraphQL
Tipado en GraphQL
GraphQL en la Tienda con Express.js
- 11

Cómo separar resolvers GraphQL por entidad
12:17 min - 12

Conexión de Base de Datos y Consultas en GraphQL con SQLite
07:30 min - 13

Creación de productos con mutations e inputs en GraphQL
11:19 min - 14

Uso de Variables y Alias en GradQL para Optimizar Consultas
10:57 min - 15

Actualización y Eliminación de Productos con GraphQL
12:41 min - 16

Anidamiento de Entidades con GradQL en APIs
07:32 min
Autenticación con GraphQL y JSON Web Tokens
- 17

Autenticación de Usuarios con JWT en GraphQL y Node.js
18:01 min - 18

Creación de Mutación para Categorías con Validación de Roles
06:15 min - 19

Autenticación de JSON Web Tokens en GraphQL con Passport
08:07 min - 20

Validación de Roles y Sesiones con GradQL y Express
10:22 min - 21

Validación de Datos en GradQL con Scalars Personalizados
15:19 min
Bonus
Conclusiones
Tipos escalares de GraphQL y validación automática
Resumen
GraphQL tiene un sistema de tipos llamado scalar types que define qué información puedes enviar y recibir en tus queries. Aprender a usar Int, Float, String, Boolean e ID te permite construir APIs con validación automática de datos, tanto en la entrada como en la salida, sin escribir lógica adicional.
¿Qué son los scalar types en GraphQL?
Los scalar types son los tipos de datos primitivos que GraphQL soporta de forma nativa para tipar tus queries y resolvers. Son la base sobre la que después construyes tipos más complejos.
En la práctica, GraphQL te ofrece cinco tipos escalares y cada uno cumple un propósito puntual dentro de tu schema [01:00]:
- Int: representa números enteros sin decimales.
- Float: maneja números con precisión decimal, ideal para precios o medidas.
- String: cadenas de texto, el tipo más común para nombres y descripciones.
- Boolean: valores de verdadero o falso.
- ID: identificador único; internamente se trata como string, pero su intención es representar claves únicas que incluso pueden usarse para sistemas de caché.
Un detalle de sintaxis importante: todos los tipos escalares se escriben con la primera letra en mayúscula, excepto ID, que va completamente en mayúsculas [01:30].
¿Para qué sirve el tipo ID en GraphQL? Es un string especial que representa un identificador único. Aunque se comporta como texto, su semántica le indica al cliente que ese valor sirve para identificar un recurso y puede aprovecharse en caché.
¿Cómo defines queries y resolvers con tipos escalares?
Dentro de tu variable typeDefinitions declaras la firma de cada query y luego, en la capa de resolvers, escribes la función que devuelve el valor con el tipo correcto.
Por ejemplo, así se ve una query que retorna cada uno de los tipos escalares:
graphql type Query { getInt: Int getFloat: Float getString: String getBoolean: Boolean getID: ID }
Y los resolvers correspondientes devuelven el valor que prometiste en el contrato:
javascript const resolvers = { Query: { getInt: () => 10, getFloat: () => 12.5, getString: () => "Hola", getBoolean: () => true, getID: () => "abc123" } }
Una vez los tienes listos, puedes ejecutar varias queries en paralelo dentro del playground y GraphQL las resuelve a todas en una sola petición [04:30]. Esa flexibilidad es uno de los grandes diferenciadores frente a REST.
¿Cómo tipar argumentos de entrada en una query?
Los tipos escalares no solo describen lo que retornas, también validan lo que recibes. Puedes definir argumentos en tus queries indicando su tipo:
graphql type Query { getInt(age: Int): Int getFloat(price: Float): Float }
En el resolver, esos argumentos llegan en el segundo parámetro, que normalmente se nombra args:
javascript getInt: (parent, args) => args.age, getFloat: (parent, args) => args.price
De esa forma, el mismo typing funciona en doble vía: como contrato de salida y como contrato de entrada.
¿Cómo valida GraphQL la integridad de los datos?
GraphQL aplica los contratos de tipos en ambas direcciones. Si tu resolver promete un String pero retorna un array, el servidor responde con un error indicando que la información de salida es incorrecta [06:00].
Lo interesante pasa también en la entrada. Si la query espera un Int y el cliente manda un string, GraphQL bloquea la consulta antes de ejecutarla:
- Envías
age: 12yprice: 12.5y todo funciona. - Envías
age: "12"como texto y la consulta falla automáticamente.
Esto significa que una aplicación en React, Angular o móvil no puede enviar un tipo distinto al definido en el schema. La validación es automática y sucede del lado del servidor sin que tú escribas código extra.
¿GraphQL valida los datos automáticamente? Sí. Valida tanto el valor que retorna el resolver como los argumentos que envía el cliente. Si alguno no cumple el tipo declarado, la query falla antes de ejecutarse.
¿Qué pasa si mi resolver retorna un tipo distinto al declarado? GraphQL responde con un error de tipo y no entrega la información al cliente. El contrato del schema obliga al backend a cumplir la firma exacta.
Esa doble validación es lo que convierte a GraphQL en una capa confiable entre clientes y servidores: el schema funciona como un acuerdo estricto que ambas partes deben respetar. En la siguiente clase verás cómo extender estos tipos con listas y cómo marcar campos para que nunca retornen valores en nulo. ¿Cuál de estos tipos escalares usas más en tus proyectos? Cuéntalo en los comentarios.