En esta página:
Cuando estamos trabajando en un proyecto, los datos no son la exepción, estos están presentes siempre en cualquier sistema informático. Cada tecnología tiene sus propios tipos de datos, si bien algunos de ellos pueden parecerse entre sí, cada tecnología puede variar sus tipos de datos en varios o pocos detalles. Conocer que tipos de datos y como funcionan nos dará un gran alcance para trabajar de manera adecuada con ellos. En este poste compartiré los Tipos de Datos y Schemas en GraphQL, vamos con ello.
Partes
- Parte 1
- Parte 2 (Final)
Antes de continuar, te invito a escuchar el Podcast: “Dominio del trabajo con Varios Lenguajes de Programación” y “¿ Cual Es El Momento Ideal Para Dejar Tu Empleo y Ser Freelance ?” (Anchor Podcast):
Spotify: | Sound Cloud: | Apple Podcasts | Anchor Podcasts |
Bien ahora continuemos con el Post: Tipos de Datos y Schemas en GraphQL – Parte 1.
Tipos de Datos y Schemas en GraphQL
GraphQL es lenguaje para hacer consultas a APIs REST y puede funcionar en cualquier framework o lenguaje de programación, por ello nos enfocaremos en los conceptos de Schemas y tipos que tiene esta tecnología.
Sistema de Tipos
Si has visto una consulta de GraphQL antes, debes saber que el lenguaje de consula GraphQL se trata básicamente de seleccionar campos en objetos, por ejemplo tenemos los siguientes datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "data": { "postre": { "nombre": "Gelatina", "saboresDisponibles": [ "Fresa", "Naranja", "Menta" ] } } } |
De los datos anteriores, hacemos la siguiente consulta:
1 2 3 4 5 6 7 8 |
{ postre { nombre saboresDisponibles } } |
En la consulta anterior, empezamos con un objeto raiz especial. Luego seleccionamos el campo postre. Para el objeto devuelto por postre, seleccionamos los campos nombre y saboresDisponibles.
Debido a que la forma de una consulta de GraphQL coincide estrechamente con el resultado, puede predecir qué devolverá la consulta sin saber mucho sobre el servidor. Pero es útil tener una descripción exacta de los datos que podemos solicitar: ¿qué campos podemos seleccionar? ¿Qué tipo de objetos podrían devolver? ¿Qué campos están disponibles en esos subobjetos? Ahí es donde entra el esquema.
Cada servicio de GraphQL define un conjunto de tipos que describen completamente el conjunto de posibles datos que puede consultar en ese servicio. Luego, cuando ingresan las consultas, se validan y ejecutan contra ese esquema.
Los servicios de GraphQL se pueden escribir en cualquier lenguaje. Dado que no podemos confiar en una sintaxis de lenguaje de programación específica, como JavaScript, para hablar sobre los schemas (esquemas) de GraphQL, definiremos nuestro propio lenguaje simple. Usaremos el “lenguaje de esquema GraphQL”: es similar al lenguaje de consulta y nos permite hablar sobre los esquemas GraphQL de una manera independiente del lenguaje.
Tipos de Objetos y Campos
Los componentes más básicos de un esquema de GraphQL son los tipos de objetos, que solo representan un tipo de objeto que puedes obtener de tu servicio y qué campos tiene. En el lenguaje de esquema GraphQL, podríamos representarlo así:
1 2 3 4 5 6 |
type Postre { nombre: String! saboresDisponibles: [Sabor!]! } |
El lenguaje es bastante legible, pero repasémoslo para que podamos tener un vocabulario compartido:
- Postre es un tipo de objeto GraphQL , lo que significa que es un tipo con algunos campos. La mayoría de los tipos en su esquema serán tipos de objetos.
- name y saboresDisponibles son campos en el tipo Postre. Eso significa que nombre y saboresDisponibles son los únicos campos que pueden aparecer en cualquier parte de una consulta de GraphQL que opera en el tipo Postre.
- String es uno de los tipos escalares incorporados: estos son tipos que se resuelven en un solo objeto escalar y no pueden tener subselecciones en la consulta. Repasaremos los tipos escalares más adelante.
- String! significa que el campo no admite valores NULL , lo que significa que el servicio GraphQL promete proporcionarle siempre un valor cuando consulte este campo. En el lenguaje tipográfico, representaremos aquellos con un signo de exclamación.
- [Sabor!]! representa una matriz de objetos Postre. Dado que tampoco acepta valores NULL, siempre puedes esperar una matriz (con cero o más elementos) cuando consulta el campo saboresDisponibles. Y dado que Sabor! tampoco admite valores NULL, siempre puedes esperar que cada elemento de la matriz sea un objeto Postre.
Ahora sabes cómo se ve un tipo de objeto GraphQL y cómo leer los conceptos básicos del lenguaje de tipos GraphQL.
Argumentos
Cada campo en un tipo de objeto GraphQL puede tener cero o más argumentos, por ejemplo, el siguiente campo length:
1 2 3 4 5 6 7 |
type Postre { id: ID! nombre: String! length(unit: LengthUnit = METER): Float } |
Todos los argumentos tienen nombre. A diferencia de lenguajes como JavaScript y Python, donde las funciones toman una lista de argumentos ordenados, todos los argumentos en GraphQL se pasan por nombre específicamente. En este caso, el campo length tiene un argumento definido, unit.
Los argumentos pueden ser obligatorios u opcionales. Cuando un argumento es opcional, podemos definir un valor predeterminado: si unit no se pasa el argumento, se establecerá METER de manera predeterminada.
Tipos de Consulta y Mutación
La mayoría de los tipos en su esquema serán solo tipos de objetos normales, pero hay dos tipos que son especiales dentro de un esquema:
1 2 3 4 5 6 |
schema { query: Query mutation: Mutation } |
Cada servicio de GraphQL tiene un tipo query y puede o no tener un tipo mutation. Estos tipos son los mismos que un tipo de objeto regular, pero son especiales porque definen el punto de entrada de cada consulta de GraphQL. Entonces, si tenemos los siguientes datos:
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "data": { "postre": { "nombre": "Gelatina de Fresa" }, "jugo": { "nombre": "Jugo de Naranja" } } } |
Y la consulta se parece a:
1 2 3 4 5 6 7 8 9 10 |
query { postre { nombre } jugo(id: "35") { nombre } } |
Eso significa que el servicio GraphQL debe tener un tipo Query con los campos postre y jugo:
Las mutaciones funcionan de manera similar: tu defines los campos en el tipo Mutation y están disponibles como campos de mutación raíz a los que puedes llamar en tu consulta.
Es importante recordar que, aparte del estado especial de ser el “punto de entrada” en el esquema, los tipos Query y Mutation son los mismos que cualquier otro tipo de objeto de GraphQL, y sus campos funcionan exactamente de la misma manera.
Bien, hasta aquí llegamos con esta primera parte con los Tipos de Datos y Schemas en GraphQL.
Ten Paciencia, lo que quiero es que conozcas bien los tipos de datos y schemas (esquemas) en GraphQL y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En la siguiente parte y última veremos otro grupo de Tipos de Datos y Schemas en GraphQL.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.