# 9.3 - Consumindo uma API (GET)

O método **GET** é utilizado para **recuperar dados do servidor sem alterar seu estado**. Ele é considerado um método **seguro e idempotente**, pois não causa efeitos colaterais mesmo que seja chamado repetidamente. Usado principalmente para **consultas**, como buscar informações de usuários, produtos ou qualquer outro recurso, o GET transmite os dados pela **URL**, geralmente por meio de parâmetros de consulta. É o método mais comum em navegação na web e em chamadas de leitura em APIs.

#### 📥 Exemplo  de estrutura GET — Buscar Dados

```javascript
fetch('https://api.exemplo.com/usuarios')
  .then(response => response.json())
  .then(data => console.log('Usuários:', data))
  .catch(error => console.error('Erro no GET:', error));

```

<details>

<summary>☝️🤓 Explicação do exemplo GET</summary>

* `fetch('https://api.exemplo.com/usuarios')`\
  → Faz uma requisição **GET** para o endpoint especificado (por padrão, `fetch` usa GET).
* `.then(response => response.json())`\
  → Quando a resposta chegar, converte o corpo da resposta para JSON.
* `.then(data => console.log('Usuários:', data))`\
  → Quando o JSON estiver pronto, exibe os dados no console.
* `.catch(error => console.error('Erro no GET:', error));`\
  → Se der erro em qualquer parte da requisição, exibe o erro no console.

</details>

## Exemplo prático

Neste exemplo prático, irei mostrar como consumir uma API na realidade. A API que irá ser consumida é a BrasilAPI, disponível no link <https://brasilapi.com.br/docs#tag/CEP>.

{% stepper %}
{% step %}

### Primeiro passo: Ler a documentação da API

A primeira coisa a se fazer é ler a documentação da API, lá você descobrirá os parâmetros que devem ser passados no endpoint, e os parâmetros que serão recebidos.

<figure><img src="https://3296352579-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM6UO6l8WmCnDy7MzGKD1%2Fuploads%2Fej8SDni8v4VZ08xONoi1%2Fimage.png?alt=media&#x26;token=7f6f34fa-112f-49dd-8b3b-0a24e724cd25" alt=""><figcaption></figcaption></figure>

Observe que existe uma descrição falando o que essa endpoit faz, que é&#x20;

"Busca por CEP com múltiplos providers de fallback"

Significa que a **BrasilAPI tenta buscar o CEP em mais de uma fonte de dados (provider)**.\
Se a primeira fonte não encontrar o CEP, ela **tenta em outras**, automaticamente.

Note, também, que existe o PATH PARAMETERS, que indica quais são os parâmetros que o endpoint precisa.
{% endstep %}

{% step %}

### Respostas

Na documentação, também é possível observar as possíveis respostas que podemos obter ao consumir esse endpoint:

<figure><img src="https://3296352579-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM6UO6l8WmCnDy7MzGKD1%2Fuploads%2FtAvWL2fOW59J9o9XaS0T%2Fimage.png?alt=media&#x26;token=6147141c-3884-4566-b5e8-9a1f09c1bfda" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Consumindo a API

```javascript
const cep = '01001-000'; // Exemplo: Praça da Sé - SP
const endpoint =  `https://brasilapi.com.br/api/cep/v1/${cep}`
fetch(endpoint)
  .then(response => {
    if (!response.ok) {
      throw new Error('CEP não encontrado');
    }
    return response.json();
  })
  .then(data => {
    console.log('Endereço encontrado:', data);
  })
  .catch(error => {
    console.error('Erro na requisição:', error.message);
  });

```

### Resposta que esperamos:

```javascript
{
  "cep": "01001-000",
  "state": "SP",
  "city": "São Paulo",
  "neighborhood": "Sé",
  "street": "Praça da Sé",
  "service": "correios"
}
```

{% endstep %}
{% endstepper %}

### ⚠️ Exemplo do código com async/await&#x20;

```javascript
const cep = '01001-000'; // Exemplo: Praça da Sé - SP
const endpoint = `https://brasilapi.com.br/api/cep/v1/${cep}`;

async function buscarCep() {
  try {
    const response = await fetch(endpoint);

    if (!response.ok) {
      throw new Error('CEP não encontrado');
    }

    const data = await response.json();
    console.log('Endereço encontrado:', data);
  } catch (error) {
    console.error('Erro na requisição:', error.message);
  }
}

buscarCep();

```

A função `buscarCep` faz uma requisição `GET` para buscar os dados de um CEP usando a `brasilapi`. Se a resposta não for OK, lança um erro. Caso contrário, converte a resposta em JSON e exibe no console o endereço encontrado. Se algo der errado, o erro é tratado no `catch` e exibido com a mensagem de erro.
