Edgar Ocampo Bernal
el UUID?
Sergio Brandon De Lucio Chavero
Segun tengo entendido puede ser cualquier tipo de ID xD
Sergio Brandon De Lucio Chavero
Según tengo entendido puede ser cualquier tipo de ID xD
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]:
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:
age: 12 y price: 12.5 y todo funciona.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.
Edgar Ocampo Bernal
el UUID?
Sergio Brandon De Lucio Chavero
Segun tengo entendido puede ser cualquier tipo de ID xD
Sergio Brandon De Lucio Chavero
Según tengo entendido puede ser cualquier tipo de ID xD
Gilberto Santamaria
Una aclaración importante, yo le puedo pasar por los arg distintos valores de diferentes tipos, siempre y cuando el resolver devuelva el valor esperado, por ejemplo puedo hacer esto
const typeDefs = ` type Query { getInt(number:String):Int }`;
El Query getInt debe devolver un entero pero le paso un String de argumento y esto es valido, una mala practica pero valido
Y en my resolver para que funcione haría esto
getInt: (_,args)=> Number(args.number)
Esto funciona siempre que el string que pasemos sea un numero entero ya que si paso un string como "12.55" Number me devuelve un float lo cual va a generar un error