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