GraphQL - Introducción

GraphQL es una tecnología del lado del servidor de código abierto que fue desarrollada por Facebook para optimizar las llamadas a la API RESTful. Es un motor de ejecución y un lenguaje de consulta de datos. En este capítulo, analizamos las ventajas de usar GraphQL.

Por qué GraphQL

Las API RESTful siguen un enfoque claro y bien estructurado orientado a los recursos. Sin embargo, cuando los datos se vuelven más complejos, las rutas se hacen más largas. A veces, no es posible obtener datos con una sola solicitud. Aquí es donde GraphQL resulta útil. GraphQL estructura los datos en forma de gráfico con su potente sintaxis de consulta para recorrer, recuperar y modificar datos.

Las siguientes son las ventajas de usar el lenguaje de consulta GraphQL:

Pida lo que quiera y consígalo

Envíe una consulta GraphQL a su API y obtenga exactamente lo que necesita. Las consultas GraphQL siempre devuelven resultados predecibles. Las aplicaciones que utilizan GraphQL son rápidas y estables. A diferencia de los servicios Restful, estas aplicaciones pueden restringir los datos que deben obtenerse del servidor.

El siguiente ejemplo lo ayudará a comprender esto mejor:

Consideremos un objeto comercial Student con los atributos id, firstName, lastName y collegeName . Supongamos que una aplicación móvil tiene que ir a buscar sólo el primerNombre y ID . Si diseñamos un punto final REST como / api / v1 / Students , terminará obteniendo datos para todos los campos de un objeto Student . Esto significa que el servicio RESTful recupera datos en exceso. Este problema se puede resolver utilizando GraphQL.

Considere la consulta GraphQL dada a continuación:

{
   students {
      id
      firstName
   }
}

Esto devolverá valores solo para los campos id y firstname. La consulta no obtendrá valores para otros atributos del objeto de estudiante. La respuesta de la consulta ilustrada arriba es la que se muestra a continuación:

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim"
         },
         {
            "id": "S1002",
            "firstName": "Kannan"
         }
      ]
   }
}

Obtenga muchos recursos en una sola solicitud

Las consultas GraphQL ayudan a recuperar sin problemas los objetos comerciales asociados, mientras que las API REST típicas requieren la carga desde varias URL. Las API GraphQL obtienen todos los datos que su aplicación necesita en una sola solicitud. Las aplicaciones que utilizan GraphQL pueden ser rápidas incluso en conexiones de red móviles lentas.

Consideremos un objeto comercial más, College , que tiene los atributos: nombre y ubicación. El objeto comercial Estudiante tiene una relación de asociación con el objeto Universidad. Si usáramos una API REST para obtener los detalles de los estudiantes y su universidad, terminaremos haciendo dos solicitudes al servidor como / api / v1 / Students y / api / v1 / colleges . Esto dará lugar a una búsqueda de datos insuficiente con cada solicitud. Entonces, las aplicaciones móviles se ven obligadas a realizar múltiples llamadas al servidor para obtener los datos deseados.

Sin embargo, la aplicación móvil puede obtener detalles de los objetos Student y College en una sola solicitud mediante GraphQL.

La siguiente es una consulta GraphQL para obtener datos:

{
   students{
      id
      firstName
      lastName
      college{
         name
         location
      }
   }
}

El resultado de la consulta anterior contiene exactamente los campos que hemos solicitado como se muestra a continuación:

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim",
            "lastName": "Mohammad",
            "college": {
               "name": "CUSAT",
               "location": "Kerala"
            }
         },
         
         {
            "id": "S1002",
            "firstName": "Kannan",
            "lastName": "Sudhakaran",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         },
         
         {
            "id": "S1003",
            "firstName": "Kiran",
            "lastName": "Panigrahi",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         }
      ]
   }
}

Describe lo que es posible con un sistema de tipos.

GraphQL está fuertemente tipado y las consultas se basan en campos y sus tipos de datos asociados. Si hay una discrepancia de tipos en una consulta GraphQL, las aplicaciones del servidor devuelven mensajes de error claros y útiles. Esto ayuda a una depuración fluida y una fácil detección de errores por parte de las aplicaciones cliente. GraphQL también proporciona bibliotecas del lado del cliente que pueden ayudar a reducir la conversión y el análisis explícito de datos.

A continuación, se ofrece un ejemplo de los tipos de datos Student y College :

type Query {
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}

type College {
   id:ID!
   name:String
   location:String
   rating:Float
   students:[Student]
}

Muévase más rápido con potentes herramientas para desarrolladores

GraphQL proporciona herramientas de desarrollo completas para documentación y consultas de prueba. GraphiQL es una excelente herramienta que genera documentación de la consulta y su esquema. También proporciona un editor de consultas para probar las API de GraphQL y la capacidad de completar código inteligente mientras se crean consultas.