Pular para o conteúdo principal

victorstein.dev

15/100 Dias de Golang - Requests para APIs Externas - Parte 2

Table of Contents

# Requests para APIs Externas - Parte 2

Agora que já sabemos como fazer um request básico, vamos incrementar um pouco. Adiciar a API Key, fazer um request para uma rota que precisa de autenticação. Vamos fazer um request para a rota /movie da API do Senhor dos Anéis, que precisa de autenticação. Para isso, precisamos passar a chave de API no cabeçalho da requisição.

package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://the-one-api.dev/v2/movie"

	// Cria a request manualmente
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Erro ao criar request:", err)
		return
	}

	// Adiciona o header Authorization
	req.Header.Add("Authorization", "Bearer your-api-key-123")

	// Faz a requisição usando o client padrão
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		fmt.Println("Erro ao fazer request:", err)
		return
	}
	defer resp.Body.Close()

	// Lê a resposta
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Erro ao ler resposta:", err)
		return
	}


	fmt.Println("Resposta:", string(body))
}

A diferença nesse código é que criamos a requisição manualmente com o método http.NewRequest, onde passamos o método HTTP, a URL e o corpo da requisição (que no caso é nil). Depois, adicionamos o cabeçalho de autenticação com o método Header.Add. Por fim, fazemos a requisição com o método http.DefaultClient.Do, que retorna a resposta. Nesse caso o request vai falhar, pois não temos a chave de API. O último print vai imprimir o erro da requisição.

Resposta: {"success":false,"message":"Unauthorized."}

Vamos adicionar um pouco de tratamento de erro, para verificar se a requisição falhou ou não. Para isso, vamos verificar o status da resposta. Se o status for diferente de 200, vamos imprimir o erro e retornar.

if resp.StatusCode != http.StatusOK {
	fmt.Println("Erro na resposta:", resp.Status)
	return
}

Agora sim, se o status da requisição for diferente de 200, vamos imprimir o erro. Veja o retorno da requisição:

Erro na resposta: 401 Unauthorized