Resty para Go: um cliente HTTP poderoso e elegante
No mundo Go, existem várias bibliotecas para trabalhar com requisições HTTP. O pacote padrão net/http oferece funcionalidades básicas, mas para projetos reais, muitas vezes é necessário algo mais conveniente e funcional. A biblioteca Resty é exatamente o que os desenvolvedores que valorizam simplicidade, legibilidade de código e recursos poderosos "prontos para uso" precisam.
Resty se posiciona como um "cliente Go para APIs REST, inspirado na biblioteca Ruby RestClient". Ela oferece uma interface fluente (encadeamento de chamadas), processamento automático de JSON, mecanismos internos de repetição de tentativas, timeouts, middleware e muito mais. Graças à sua arquitetura, Resty permite escrever código conciso e expressivo para interagir com qualquer serviço HTTP — desde simples requisições GET até integrações complexas de API em várias etapas.
Por que usar Resty em vez do net/http padrão? Primeiro, ela reduz significativamente o código boilerplate. Você não precisa criar manualmente estruturas de requisição, definir cabeçalhos ou analisar respostas JSON. Segundo, Resty fornece abstrações convenientes para trabalhar com cookies, autenticação, proxies e uploads de arquivos. Terceiro, a biblioteca é ativamente mantida, possui excelente documentação e é usada em milhares de projetos em produção. Isso torna Resty uma das melhores escolhas para cliente HTTP no ecossistema Go.
Instalação
A instalação do Resty é feita da maneira padrão do Go — através do gerenciador de dependências go get:
go get -u github.com/go-resty/resty/v2
Após executar este comando, a biblioteca será adicionada ao seu arquivo go.mod. Certifique-se de estar usando Go versão 1.16 ou superior para suporte a módulos.
No seu código, a importação será assim:
import "github.com/go-resty/resty/v2"
Início rápido
Vamos começar com um exemplo mínimo funcional — fazer uma requisição GET a uma API pública e exibir o resultado:
package main
import (
"fmt"
"github.com/go-resty/resty/v2"
)
func main() {
// Criando o cliente
client := resty.New()
// Executando uma requisição GET
resp, err := client.R().
SetHeader("Accept", "application/json").
Get("https://jsonplaceholder.typicode.com/posts/1")
if err != nil {
fmt.Println("Erro:", err)
return
}
fmt.Println("Status:", resp.StatusCode())
fmt.Println("Corpo da resposta:", resp.String())
}
Este exemplo demonstra a principal característica do Resty — a interface fluente. Criamos um cliente, depois através do método R() criamos uma nova requisição, definimos um cabeçalho e executamos o GET. Todas as chamadas são encadeadas, tornando o código muito legível.
Métodos e funções principais
Vamos explorar 10 métodos-chave do Resty que cobrem 90% de todas as tarefas ao trabalhar com HTTP.
1. resty.New()
Assinatura: func New() *Client
O que faz: Cria uma nova instância do cliente HTTP com configurações padrão. Este é o ponto de partida para todas as operações.
client := resty.New()
// Agora client está pronto para uso
2. Client.R()
Assinatura: func (c *Client) R() *Request
O que faz: Cria um novo objeto de requisição. Todos os métodos para configurar a requisição (cabeçalhos, corpo, parâmetros) são chamados neste objeto.
request := client.R()
request.SetHeader("Content-Type", "application/json")
// ... trabalho adicional com a requisição
3. Request.Get(url)
Assinatura: func (r *Request) Get(url string) (*Response, error)
O que faz: Executa uma requisição HTTP GET para a URL especificada. Retorna a resposta e um erro, se houver.