Cómo obtener datos en React desde una API GraphQL: paso a paso

Go to Homepage

Comenzamos por entender qué es GraphQL y su relación con React

GraphQL es un lenguaje de consulta utilizado para interactuar con APIs y obtener datos de manera eficiente. La ventaja principal de GraphQL es que permite realizar consultas precisas para obtener solo los datos necesarios, en lugar de recibir todo el conjunto de datos de retorno, lo cual ahorra ancho de banda y hace que las aplicaciones se ejecuten más rápido. En React, la API GraphQL es una excelente opción para manejar los datos ya que React es una biblioteca de desarrollo web que realiza la programación basada en componentes.

Si eres un desarrollador web experimentado y ya conoces JavaScript, es posible que debas invertir algo de tiempo para entender cómo funciona GraphQL. Afortunadamente, este tipo de API es fácil de usar, si se tiene una guía adecuada.

En React, la conexión con GraphQL se puede establecer a través del uso de una biblioteca GraphQL específica. Una de estas librerías es Relay, que ha sido diseñada por Facebook, la misma compañía detrás de React. Otra opción es Apollo, que es una biblioteca GraphQL de código abierto.

En cuanto al uso de GraphQL en React, hay varias opciones para manejar los datos. Por ejemplo, es posible configurar un cliente GraphQL con la biblioteca Apollo para permitir que los componentes React obtengan datos de una API GraphQL. El uso de GraphQL en React también significa que es posible cachear los datos y tener control total sobre los errores en las solicitudes de la API, así como establecer configuraciones personalizadas para manejar los datos.

En Resumen, GraphQL es un lenguaje de consulta utilizado para interactuar con las APIs de GraphQL y manejar los datos de manera eficiente. Al utilizar React, se tiene la opción de conectar el componente con la API, permitiendo que se realicen solicitudes precisas para obtener los datos necesarios. El uso de una biblioteca GraphQL específica, como Apollo o Relay, ayuda a la mejor interacción entre React y GraphQL. En términos de manejar los datos, GraphQL proporciona características como caché de datos y control más completo de error para la mejor experiencia general de desarrollo web.

Definimos la estructura de la consulta a la API y su ejecución en el componente

En la programación web, React es una biblioteca popular de JavaScript utilizada para la creación de interfaces de usuario. Para obtener datos en una aplicación React, a menudo se utilizan APIs para enviar y recibir datos. Hoy, compartiremos como obtener datos desde una API GraphQL utilizando React.

Lo primero que debes hacer es definir la estructura de la consulta a la API. La consulta debe ser específica para que puedas recibir los datos solicitados. Definimos la consulta en lenguaje GraphQL en un archivo separado y la importamos al archivo del componente correspondiente a la aplicación React. Luego, importamos específicamente los datos necesarios y los utilizamos en el componente.

query getBooks {
    books {
        title
        author
        publishingYear
        category
    }
}

Luego de haber definido la estructura de la consulta, procedemos a la ejecución de la misma utilizando la biblioteca de cliente de GraphQL. En este caso, utilizaremos la biblioteca de cliente de Apollo.

En el archivo del componente, definimos una consulta utilizando la función useQuery de Apollo, la cual es capaz de manejar la ejecución de la consulta.

import React from "react";
import { useQuery } from "@apollo/client";
import { GET_BOOKS } from "./queries";

function BookList() {
    const { loading, error, data } = useQuery(GET_BOOKS);

    if (loading) return <p>Loading...</p>;
    if (error) return <p>Error :(</p>;

    return (
        <div>
            {data.books.map((book) => (
                <div key={book.title}>
                    <h2>{book.title}</h2>
                    <p>{book.author}</p>
                    <p>{book.publishingYear}</p>
                    <p>{book.category}</p>
                </div>
            ))}
        </div>
    );
}

Si observas el código, la función useQuery recibe como parámetro la consulta previamente definida. La función espera un objeto que devolverá tres posibles resultados: loading, error y data. loading se utiliza mientras se espera una respuesta de la consulta, error se utiliza para manejar cualquier error que surja durante la ejecución de la consulta, y data ayudará a mostrar los datos en la interfaz de usuario.

Luego de obtener los datos, los utilizamos para mostrarlos en la interfaz de usuario. En este ejemplo de código, hemos creado una lista de libros recuperados de la API GraphQL que se mostrará a los usuarios.

Obtener datos en una aplicación de React utilizando una API GraphQL es bastante sencillo con la biblioteca de cliente de Apollo. La clave es definir adecuadamente la estructura de la consulta a la API y ejecutarla utilizando la función useQuery. Así, podemos diseñar nuestras aplicaciones con datos actualizados en tiempo real según nuestros requisitos.

Manejamos la respuesta de la API usando el estado del componente

En este tutorial, aprendimos cómo obtener datos en React desde una API GraphQL de forma eficiente. Ahora, queremos asegurarnos de poder utilizar los datos obtenidos para actualizar la vista de nuestro componente. Para hacer esto, podemos usar el estado del componente en React.

En primer lugar, debemos definir un estado inicial para nuestro componente. Podemos hacer esto en el constructor del componente, usando la función setState. Por ejemplo:

constructor(props) {
  super(props);
  this.state = {
    data: []
  };
}

Aquí, hemos definido el estado inicial como un objeto con una propiedad data que es un array vacío. Este será el lugar donde almacenaremos los datos obtenidos de la API.

Una vez que hemos definido nuestro estado inicial, podemos actualizar el estado cada vez que recibimos una respuesta de la API. Podemos hacer esto en el método componentDidMount, que se ejecuta una vez que el componente se ha montado en la página. Por ejemplo:

componentDidMount() {
  fetch('https://api.graphqlplaceholder.com/graphql', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({query: '{ posts { title } }'})
  })
    .then(response => response.json())
    .then(json => {
      this.setState({data: json.data.posts});
    });
}

Aquí, hemos utilizado el método fetch para realizar una consulta a la API GraphQL en el endpoint que devuelve todos los títulos de las publicaciones. Una vez que recibimos la respuesta, convertimos la respuesta JSON a un objeto y actualizamos el estado del componente con los datos obtenidos.

Finalmente, podemos renderizar los datos en la vista del componente utilizando el estado actualizado. Podemos hacer esto en la función render del componente. Por ejemplo:

render() {
  return (
    <div>
      <h1>Posts</h1>
      <ul>
        {this.state.data.map(post => (
          <li>{post.title}</li>
        ))}
      </ul>
    </div>
  );
}

Aquí, hemos utilizado this.state.data para obtener los datos del estado y map junto con JSX para renderizar cada uno de los títulos en una lista.

Manejar la respuesta de una API con React es sencillo utilizando el estado del componente. Siguiendo los pasos descritos en este tutorial y utilizando los fundamentos de programación en Javascript, podemos actualizar fácilmente la vista de nuestro componente con los datos obtenidos. Ahora ya tenemos las herramientas necesarias para aprovechar al máximo las consultas de API GraphQL en el desarrollo web.

Reutilizamos componentes y consultas para un mejor rendimiento y escalabilidad

Una de las ventajas de trabajar con React y API GraphQL es la posibilidad de reutilizar componentes y consultas. Al utilizar componentes reutilizables, ahorramos tiempo y nos aseguramos de escribir menos código repetitivo. Por otro lado, reutilizar consultas nos permite optimizar la eficiencia de la página al minimizar la cantidad de consultas realizadas.

En cuanto a los componentes reutilizables, es importante tener en cuenta que estos deben cumplir con un propósito específico y ser lo más independientes posible. En otras palabras, un componente debe ser capaz de aceptar diferentes propiedades (props) sin tener que ser reescrito. De esta manera, podemos utilizar el mismo componente en diferentes partes de nuestra aplicación web sin tener que preocuparnos por modificar el código.

Para lograr esto, podemos separar cada componente en diferentes archivos y agruparlos en carpetas basadas en su funcionalidad. Por ejemplo, si tenemos un componente para mostrar una lista de usuarios, podemos colocar ese componente en una carpeta llamada “Usuarios” y reutilizarlo en diferentes partes de nuestra aplicación.

En cuanto a las consultas reutilizables, GraphQL provee de una herramienta llamada Fragments, que nos permite definir un modelo de datos que puede ser utilizado por diferentes consultas. De esta manera, podemos definir un modelo de datos para un usuario y utilizarlo en diferentes consultas que requieran los mismos datos.

Por ejemplo, podemos definir un Fragment para un usuario que contenga su nombre, correo electrónico y foto de perfil. Luego, podemos utilizar ese Fragment en diferentes consultas en diferentes partes de nuestra aplicación sin tener que definir las mismas propiedades una y otra vez.

const userFragment = gql`
    fragment UserFragment on User {
        name
        email
        profilePicture {
            url
        }
    }
`;

const exampleQuery = gql`
    query Example {
        user(id: 123) {
            ...UserFragment
        }
    }
    ${userFragment}
`;

Con la ayuda de componentes y consultas reutilizables, podemos optimizar el rendimiento y escalabilidad de nuestra aplicación. Al escribir menos código repetitivo, podemos dedicar más tiempo a la programación y proporcionar una mejor experiencia para el usuario final.

La reutilización de componentes y consultas en React y API GraphQL es una práctica esencial para el desarrollo web moderno. Al utilizar estas herramientas, podemos optimizar la eficiencia de nuestra aplicación y asegurarnos de mantener nuestro código organizado y escalable.

Exploramos herramientas y recursos adicionales para trabajar con GraphQL en React

Una vez que ya tenemos una idea de cómo obtener datos desde una API GraphQL en React, es importante conocer herramientas y recursos adicionales que pueden ser útiles en el desarrollo de una aplicación web con GraphQL.

Una biblioteca muy popular en el mundo de la programación en general es Axios. Es una biblioteca de JavaScript para hacer peticiones HTTP desde el navegador o desde un servidor Node.js. En la mayoría de los casos es excelente como cliente HTTP, pero no proporciona una integración nativa con GraphQL. Para utilizarlo, primero debemos instalarlo con el siguiente comando en nuestra terminal:

npm install axios

Con Axios podemos enviar una petición GET para obtener datos desde una API GraphQL. Por ejemplo:

import axios from "axios";

const fetchData = async () => {
    const response = await axios.post(
        "https://graphql.example.com",
        {
            query: `
                query {
                  getAllData {
                    id
                    name
                    description
                  }
                }   
              `,
        },
        {
            headers: {
                "Content-Type": "application/json",
            },
        }
    );

    console.log(response.data.data.getAllData);
};

Otra herramienta útil para trabajar con GraphQL en React es Apollo Client. Es una biblioteca que nos proporciona herramientas para conectarnos a una API GraphQL. Apollo Client nos permite enviar y recibir peticiones GraphQL desde React de una manera intuitiva.

Primero debemos instalarlo en nuestro proyecto con el siguiente comando:

npm install apollo-boost @apollo/react-hooks graphql

Apollo Client nos permite realizar consultas de GraphQL directamente en los componentes de React. Para una mejor organización, podemos definir nuestras consultas en archivos separados y utilizarlas en nuestros componentes. Por ejemplo:

import { useQuery, gql } from "@apollo/client";

const GET_ALL_DATA = gql`
    query {
        getAllData {
            id
            name
            description
        }
    }
`;

const DataList = () => {
    const { loading, error, data } = useQuery(GET_ALL_DATA);

    if (loading) return <p>Loading...</p>;
    if (error) return <p>Error :(</p>;

    return data.getAllData.map(({ id, name, description }) => (
        <div key={id}>
            <p>{name}</p>
            <p>{description}</p>
        </div>
    ));
};

Trabajar con GraphQL en React es cada vez más sencillo gracias a las diversas herramientas y recursos disponibles. Axios es una biblioteca popular y eficiente para enviar peticiones HTTP desde el navegador o desde un servidor Node.js, mientras que Apollo Client nos proporciona una integración nativa con GraphQL y una manera intuitiva de enviar y recibir peticiones desde componentes de React. Con estas herramientas en nuestro arsenal, podemos desarrollar aplicaciones web más eficientes y escalables.

Otros Artículos