Consumindo API com React.js

De Aulas

Afluentes: Desenvolvimento Front-end II, Usabilidade, desenvolvimento web, mobile e jogos

Passo 1: Criar um aplicativo ReactJS

Para consumir API, vamos criar uma aplicação, tal como visto em React.js: Criação de um aplicativo, mas vamos precisar usar uma API.

Usando uma API

Para poder consumir uma API, vamos usar uma biblioteca externa chamada axios. No site deles explica a instalação e utilização.

https://www.npmjs.com/package/axios

Você pode olhar mais a fundo a documentação deles, mas já vamos adiantar as coisas aqui. Então, dentro da pasta do projeto, instale o axios da seguinte forma:

Windows:

C:\React\Projetos\consumo_api\ npm install --save axios

Linux:

user@pc:~/React/Projetos/consumo_api$ npm install --save axios

Agora vamos usar uma API para nossa aplicação. Para esse exemplo, vamos utilizaro o site www.tvmaze.com e vamos fazer uma pesquisa sobre star trek.

https://www.tvmaze.com/search?q=star+trek

Eles possuem uma API e vamos utilizá-la trocando www por api e ao invés de search, usamos show:

https://api.tvmaze.com/search/shows?q=star%20trek

api.js

Para gerenciar essa api, vamos criar um novo arquivo na pasta src. O nome pode ser de sua escolha, mas aqui vamos criá-lo como src/api.js. Nesse arquivo, vamos importar o axios, adicionar a API que queremos conosumir e exportá-la:

// Importando o axios para nosso projeto
import axios from 'axios';

/* Vamos criar uma constante chamada api, mas o nome pode
ser qual você quiser. Nela, vamos colocar um axios.create,
genérico e chamamos nossa URL. */
const api = axios.create({
    baseURL: 'https://api.tvmaze.com/search/shows?q=start%20trek'
});

// Agora exportamos essa nossa api.
export default api;

Mais informações sobre a API você encontra em: https://www.tvmaze.com/api

App.js

Depois alteramos o código do arquivo src/App.js para utilizar a API:

import React, { Component } from 'react';
import api from './api';

/* 1. Criaremos uma classe para nossa aplicação e
damos o extends em Component. Observe que agora
é adicionado no import. */
class App extends Component {

  // 3. Criamos um state para armazenar os filmes
  state = {
    filmes: [],
  }

  /* 4. Vamos adicionar um componente para buscar
  os dados na API. */
  async componentDidMount() {
    /* 5. Veja que a constante response utiliza o await
    porque usamos async. */
    const response = await api.get('');

    /* Colocamos o console log para poder inspecionar
    os elementos para debug, mas não é utilizado na 
    aplicação*/
    //console.log(response.data);

    // 6. jovar os valores recebidos para filmes
    this.setState({ filmes: response.data });
  }

  // 2. Criamos nosso render
  render() {
    /* 7. Vamos buscar os dados de this.state e jogar para
    a posição filmes*/
    const { filmes } = this.state;

    return (
      <div>
        <h1>Filmes</h1>
        { console.log(filmes)}

        {/* 8. Como temos uma array, então vamos usar um maps
        para percorrê-la. Vejaj que temos que ver no resultado
        da API os atributos que vamos mostrar, como name e url.*/}
        {filmes.map(filme => (
          <li key={filme.show.id}>
            <h2>
              {filme.show.name}
            </h2>
            <p><a href={filme.show.url} target="_blank">
              {filme.show.url}</a></p>
          </li>
        ))}
      </div>
    );
  }
}

export default App;

Podemos tirar, do baseURL o que procuramos, start%20trek do arquivo api.js e colocar como parâmetro no api.get do arquivo Api.js.

const response = await api.get('start%20trek');

Mas, para deixar a busca melhor, você pode criar um campo texto para que o usuário digite o assunto que ele quer buscar na API que utilizamos.

Se você quiser usar o bootstrap no React, basta seguir as orientações aqui.

Atividades

Desafio 1

1. Implemente o exemplo anterior no seu computador e adicione um campo texto, para que o usuário digite o que se quer procurar.

2. Mostre os resultados dentro de uma tabela.

3. Use bootstrap para deixar a visualização mais bonita.

Desafio 2

Implemente uma aplicação que consuma alguma outra API de sua escolha.