GraphQL ....

Biscoder Biscoder Biscoder Biscoder

Que es GraphQL?

GraphQL es un lenguaje de consulta y manipulación de datos de código abierto desarrollado por Facebook en 2012 y lanzado como proyecto de código abierto en 2015. Se utiliza para obtener datos de una API de manera eficiente y estructurada.

A diferencia de las APIs REST tradicionales, donde los clientes pueden recibir datos innecesarios o insuficientes en una sola llamada, GraphQL permite que los clientes especifiquen exactamente los datos que necesitan y la estructura en la que deben ser devueltos, lo que reduce la cantidad de solicitudes necesarias para completar una tarea y mejora el rendimiento de la aplicación.

GraphQL también proporciona una gran flexibilidad al permitir a los clientes definir sus propios tipos de datos y operaciones, lo que permite una mayor personalización y capacidad de integración. Además, es independiente del lenguaje y puede ser utilizado con cualquier lenguaje de programación.

GraphQL ofrece varias ventajas para el desarrollo de aplicaciones:

  1. Menor cantidad de solicitudes: GraphQL permite a los clientes solicitar exactamente los datos que necesitan en una sola llamada, lo que reduce la cantidad de solicitudes necesarias para completar una tarea y mejora el rendimiento de la aplicación.
  2. Mayor flexibilidad: GraphQL permite a los clientes definir sus propios tipos de datos y operaciones, lo que permite una mayor personalización y capacidad de integración.
  3. Documentación autogenerada: GraphQL genera automáticamente una documentación clara y fácil de leer sobre los tipos de datos disponibles y las operaciones que se pueden realizar en la API.
  4. Evolución de la API sin interrupciones: GraphQL permite que la API evolucione sin interrupciones para los clientes, lo que significa que se pueden agregar campos y tipos de datos sin afectar a los clientes existentes.
  5. Menor carga de trabajo para los desarrolladores: GraphQL simplifica el proceso de integración de datos, ya que los desarrolladores pueden solicitar solo los datos necesarios y trabajar con ellos en un formato fácilmente manejable.
  6. Compatibilidad con múltiples fuentes de datos: GraphQL permite que los clientes soliciten datos de múltiples fuentes, lo que puede ser útil en aplicaciones que dependen de datos de varias fuentes diferentes.

En general, GraphQL proporciona una forma eficiente y flexible de obtener y manipular datos en aplicaciones, lo que puede mejorar significativamente la experiencia del usuario y la eficiencia del desarrollo

GraphQL se utiliza en una gran variedad de proyectos en diversas áreas, incluyendo:

  1. Aplicaciones móviles: GraphQL es una solución popular para aplicaciones móviles, ya que permite solicitar solo los datos necesarios para la aplicación, lo que puede mejorar significativamente la velocidad de la aplicación y reducir la cantidad de datos utilizados.
  2. Aplicaciones web: GraphQL también se utiliza en aplicaciones web para reducir la cantidad de solicitudes necesarias para obtener los datos necesarios y mejorar la experiencia del usuario.
  3. Integración de servicios: GraphQL puede ser utilizado para integrar servicios de diferentes fuentes y permitir que los clientes soliciten datos de diferentes servicios en una sola llamada.
  4. Análisis de datos: GraphQL se puede utilizar para solicitar y manipular grandes cantidades de datos de una manera estructurada y eficiente.
  5. Internet de las cosas (IoT): GraphQL también puede ser utilizado en proyectos de IoT para permitir que los dispositivos soliciten y envíen datos en tiempo real.

Algunos de los proyectos principales que utilizan GraphQL incluyen Facebook, GitHub, Shopify, Pinterest, Yelp, entre otros.

Diferencias entre REST y GraphQL

La principal diferencia entre REST y GraphQL es que REST está basado en recursos y utiliza diferentes URLs para acceder a diferentes recursos, mientras que GraphQL está basado en consultas y tiene un solo punto final para acceder a todos los datos. REST es mejor para sistemas simples y pequeños, mientras que GraphQL es mejor para sistemas más grandes y complejos donde la eficiencia en el envío y recepción de datos es crucial.

REST (Representational State Transfer) es un protocolo de estilo arquitectónico para la comunicación entre sistemas, que se basa en la transferencia de datos a través de HTTP (Hypertext Transfer Protocol). REST utiliza métodos HTTP estándar (GET, POST, PUT, DELETE, etc.) para realizar operaciones CRUD (Create, Read, Update, Delete) en los recursos. Los recursos son identificados por URLs (Uniform Resource Locators) y se pueden enviar diferentes tipos de datos en diferentes formatos, como JSON (JavaScript Object Notation), XML (eXtensible Markup Language) o HTML (Hypertext Markup Language).

GraphQL, por otro lado, es un lenguaje de consulta para APIs que permite a los clientes (como aplicaciones móviles o páginas web) solicitar datos específicos de un servidor y recibir solo los datos que solicitan. En lugar de tener múltiples puntos finales para diferentes recursos, GraphQL tiene un solo punto final y utiliza un esquema para definir cómo se pueden solicitar los datos. Esto permite una mayor flexibilidad y eficiencia en la comunicación entre el cliente y el servidor.

GraphQL y Python

Existen varias librerías de Python que pueden ser utilizadas para implementar GraphQL en proyectos, continuación se describen algunas de las principales:

  1. Graphene: es una de las principales librerías de Python para construir APIs basadas en GraphQL. Proporciona un conjunto de herramientas para definir los tipos de datos, resolver las consultas y manejar las mutaciones. También es compatible con una variedad de frameworks web de Python.
  2. Ariadne: es otra librería popular de Python para implementar GraphQL. Ofrece un esquema de tipos de datos basado en Python, lo que significa que los tipos de datos y campos se pueden definir utilizando clases y atributos de Python.
  3. Strawberry: es una librería relativamente nueva que se enfoca en la simplicidad y facilidad de uso. Utiliza la anotación de tipos de Python para definir los tipos de datos y proporciona herramientas para resolver las consultas y manejar las mutaciones.
  4. GraphQL-core: es la librería principal de GraphQL en Python y proporciona una implementación completa de la especificación de GraphQL. Sin embargo, es una librería de bajo nivel y requiere más trabajo para implementar una API completa.
  5. Graphene-Python-Extras: es una extensión de Graphene que proporciona herramientas adicionales, como la paginación y la validación de entrada, para simplificar el proceso de construcción de una API basada en GraphQL.
  6. Taritflette: es otra librería popular de Python para construir APIs GraphQL. Se basa en la especificación de GraphQL y proporciona herramientas para definir el esquema de la API, resolver las consultas y manejar las mutaciones.

En general, estas librerías proporcionan una forma fácil y eficiente de implementar GraphQL en proyectos de Python, y la elección de una depende de las necesidades específicas del proyecto.

Graphene Uso

para crear una API GraphQL en Python. En este ejemplo, definiremos un tipo de objeto "Persona" con dos campos (nombre y edad), y resolveremos una consulta para devolver una lista de personas.

Primero, necesitamos instalar Graphene. Puedes hacerlo ejecutando el siguiente comando en la terminal:


             pip install graphene
         

Luego, creamos un archivo app.py y escribimos el siguiente código:

 
            import graphene
            Class Persona(graphene.ObjectType): 
                nombre = graphene.String() 
                edad = graphene.Int() 
            Class Query(graphene.ObjectType):
                personas = graphene.List(Persona)

                def resolve_personas(self, info):  
                return [
                     Persona(nombre='Juan' , edad=30, email='juan@gmail.com'),
                     Persona(nombre='Maria', edad=25, email='maria@gmail.com'), 
                     Persona(nombre='Pedro', edad=35, email='pedro@gmail.com') 
                        ]

            schema = graphene.Schema(query=Query) 

            if __name__ == '__main__': 
                query = ''' 

                personas { 
                    nombre 
                    edad 
                }
                ''' 
            
                result = schema.execute(query)
                print(result.data) 
                # Recorrer los objetos del resultado
                for obj in result.data:
                     # Recorrer los campos del objeto 
                     for field in result.data[obj]:  
                     # Imprimir el nombre del campo y su valor  
                     print(f"Nombre : {field['nombre']}") 
                     print(f"Edad : {field['edad']}") 
                     print(f"Correo : {field['email']}") 
                     print("-----------------------------") 
            

Consultas Graphql

En GraphQL, las consultas se definen utilizando un lenguaje de consulta propio, que permite al cliente especificar exactamente qué datos necesita del servidor. Las consultas pueden incluir argumentos y también pueden incluir fragmentos, que permiten al cliente reutilizar partes de la consulta en varias consultas diferentes.