Enviar uma solicitação HTTP é fundamental para qualquer aplicativo que precise se comunicar pela Internet. Descubra como enviar uma variedade de solicitações HTTP usando Go.

Um dos princípios fundamentais que regem o funcionamento da World Wide Web é a troca de solicitações e respostas. Quando você envia uma solicitação para acessar uma página da Web, o servidor responde com os dados apropriados.

Protocolos populares que regem diferentes tipos de comunicação na Internet incluem HTTP (Protocolo de Transferência de Hipertexto), FTP (Protocolo de Transferência de Arquivos) e SMTP (Protocolo de transferência de correio simples).

HTTP é o protocolo que você normalmente usará ao visualizar um site ou usar um aplicativo habilitado para web. Você também pode trabalhar com solicitações HTTP de várias linguagens de programação, incluindo Go.

O que é uma solicitação HTTP?

O HTTP define como os clientes, como os navegadores da Web, enviam solicitações aos servidores que retornam uma resposta. Uma solicitação HTTP contém informações sobre um recurso que o cliente está tentando acessar. A mensagem de solicitação geralmente inclui uma URL que identifica o recurso e outros dados opcionais, como cabeçalhos e parâmetros de consulta.

vários tipos de solicitação HTTP, incluindo GET, POST, PUT, DELETE, HEAD, OPTIONS e CONNECT. Os primeiros quatro tipos de método são os mais comuns; eles espelham as operações CRUD lidas, criadas, atualizadas e excluídas, respectivamente.

O tipo de solicitação PUT geralmente é usado de forma intercambiável com o tipo de solicitação PATCH. Eles atingem o mesmo objetivo, apenas diferem nos dados que esperam que a solicitação inclua.

Enviando solicitações usando métodos HTTP comuns

integrado do Go http pacote fornece um conjunto de funções e estruturas que você pode usar para criar servidores da Web e gerenciar solicitações HTTP. É um pacote muito robusto e todos os frameworks da web Go são construídos sobre ele de uma forma ou de outra. É um sub-pacote do Go's líquido pacote.

Para criar uma solicitação HTTP em Go, você pode usar o http. Novo pedido() e defina o método apropriado, URL, cabeçalhos e corpo da solicitação. Depois de criar a solicitação, você pode usar o Go rede/http pacote de http. Cliente{} estrutura para executá-lo e receber a resposta.

Os exemplos de código a seguir usam reqres.in, uma API disponível publicamente para testar solicitações HTTP. Você pode usá-lo para testar solicitações GET, POST, PUT e DELETE em seus programas Go.

Solicitação POST

O código abaixo é uma função que envia uma solicitação POST para o /api/users endpoint de reqres.in para criar um novo usuário com um nome e um trabalho.

pacote principal

importar (
"bytes"
"codificação/json"
"fmt"
"io"
"rede/http"
)

funçãocriarusuário(nome, trabalho corda) {
fmt. Imprimirln("Criando usuário...")

apiUrl := " https://reqres.in/api/users"
userData := []byte(`{"nome":"` + nome + `","trabalho":"` + trabalho + `"}`)

// cria nova requisição http
solicitação, erro := http. Novo pedido("PUBLICAR", apiUrl, bytes. NovoBuffer (userData))
solicitar. Cabeçalho. Definir("Tipo de conteúdo", "aplicativo/json; conjunto de caracteres = utf-8")

//envia a requisição
cliente := &http. Cliente{}
resposta, erro := cliente. Fazer (solicitar)

se erro!= nada {
fmt. Println (erro)
}

responseBody, erro := io. ReadAll (resposta. Corpo)

se erro!= nada {
fmt. Println (erro)
}

formattedData := formatJSON(responseBody)
fmt. Imprimirln("Status: ", resposta. Status)
fmt. Imprimirln("Corpo da resposta: ",formatadoData)

// limpa a memória após a execução
adiar resposta. Corpo. Fechar()
}

formatoJSON é uma função personalizada que você pode gravar para formatar os dados de saída. Veja como você pode implementá-lo:

// função para formatar dados JSON
funçãoformatoJSON(dados []byte)corda {
var bytes de saída. Amortecedor
erro := json. Recuo(&saída, dados, "", " ")

se erro != nada {
fmt. Println (err)
}

d := fora. Bytes()
retornarcorda(d)
}

Você pode ligar para o criarUsuário() funcionar em um programa como este:

funçãoprincipal() {
fmt. Imprimirln("Fazendo solicitação POST...")
criarUsuário("Tim Omolana", "Escritor")
}

Ao executar o programa em um terminal, usando o vá correr comando, você verá uma saída como esta:

Solicitação GET

O código a seguir é uma função que envia uma solicitação GET para recuperar um usuário do servidor reqres.in usando seu ID exclusivo.

// main.go
funçãogetUser(eu ia corda) {
fmt. Imprimirln("Obtendo usuário por ID...")

// faz solicitação GET para a API para obter o usuário por ID
apiUrl := " https://reqres.in/api/users/" + id
solicitação, erro := http. Novo pedido("PEGAR", apiUrl, nada)

se erro!= nada {
fmt. Println (erro)
}

solicitar. Cabeçalho. Definir("Tipo de conteúdo", "aplicativo/json; conjunto de caracteres = utf-8")

cliente := &http. Cliente{}
resposta, erro := cliente. Fazer (solicitar)

se erro!= nada {
fmt. Println (erro)
}

responseBody, erro := io. ReadAll (resposta. Corpo)

se erro!= nada {
fmt. Println (erro)
}

formattedData := formatJSON(responseBody)
fmt. Imprimirln("Status: ", resposta. Status)
fmt. Imprimirln("Corpo da resposta: ",formatadoData)

// limpa a memória após a execução
adiar resposta. Corpo. Fechar()
}

Uma solicitação GET não envia dados ao servidor, portanto, não aceita ou envia um corpo de solicitação ao servidor quando feita. Veja como será uma chamada de exemplo para a função acima:

funçãoprincipal() {
fmt. Imprimirln("Fazendo solicitação GET...")
getUser("2")
}

Saída:

Solicitação PUT

A solicitação PUT é muito semelhante a uma solicitação POST porque também envia dados para o servidor. A principal diferença é que POST cria um novo recurso enquanto PUT atualiza um existente.

Aqui está uma implementação de uma solicitação PUT:

// main.go
funçãoatualizarUsuário(nome, trabalho, id corda) {
fmt. Imprimirln("Atualizando usuário...")

// faz a solicitação PUT para a API para atualizar o usuário
apiUrl := " https://reqres.in/api/users/" + id
userData := []byte(`{"nome":"` + nome + `","trabalho":"` + trabalho + `"}`)

// cria nova requisição http PUT
solicitação, erro := http. Novo pedido("COLOCAR", apiUrl, bytes. NovoBuffer (userData))
solicitar. Cabeçalho. Definir("Tipo de conteúdo", "aplicativo/json; conjunto de caracteres = utf-8")

// Corpo da função restante da função createUser...
// Faz a solicitação, obtém a resposta e limpa a memória...
}

A partir desse código, você pode ver que as únicas diferenças entre a solicitação PUT e a solicitação POST acima são o nome do método e a URL. Ao usar um PUT para atualizar os dados existentes, você precisará anexar o id ao URL da solicitação. Um exemplo de chamada para esta função ficaria assim:

função principal() {
// atualiza a entrada com o ID 2.
updateUser("Tim Novo Nome", "Funcionário escritor", "2")
}

O código acima atualiza o usuário e produz a seguinte saída:

Apagar solicitação

Use o método de solicitação DELETE para executar uma operação de exclusão em um servidor da web. Uma solicitação de exclusão exclui o recurso identificado pelo URI. Uma solicitação DELETE em Go se parece com isto:

funçãodeletar usuário(eu ia corda) {
fmt. Imprimirln("Excluindo usuário...")
// faz solicitação DELETE à API para excluir usuário
apiUrl := " https://reqres.in/api/users/" + id

// cria nova requisição http
solicitação, erro := http. Novo pedido("EXCLUIR", apiUrl, nada)
solicitar. Cabeçalho. Definir("Tipo de conteúdo", "aplicativo/json; conjunto de caracteres = utf-8")

cliente := &http. Cliente{}
resposta, erro := cliente. Fazer (solicitar)
se erro!= nada {
fmt. Println (erro)
}

fmt. Imprimirln("Status: ", resposta. Status)
}

Uma solicitação DELETE não aceita nem retorna um corpo, portanto, não há necessidade de analisar ou formatar a solicitação JSON e o corpo da resposta. A resposta retorna apenas um status para indicar sucesso ou falha. Aqui está a aparência de uma chamada de amostra para a função com sua saída:

funçãoprincipal() {
fmt. Imprimirln("Fazendo solicitação DELETE...")
deletar usuário("2")
}

Saída:

Economize tempo usando o http. Publicar() e http. Pegar() métodos do rede/http pacote para fazer PUBLICAR e PEGAR pedidos diretamente, sem ter que usar o Novo pedido() função e o Cliente{} estrutura para criar e fazer a requisição separadamente. Confira a documentação net/http Para maiores informações.

Fazendo solicitações HTTP em aplicativos Go

O http O pacote em Go fornece tudo o que é necessário para fazer solicitações HTTP e lidar com respostas em aplicativos Go. As funções e estruturas fornecidas pelo pacote permitem criar e enviar diferentes tipos de solicitações como GET, POST, PUT, DELETE e muito mais.

Isso facilita a criação de aplicativos da Web em Go que podem interagir com outros serviços da Web e APIs. Uma boa maneira de obter mais familiarizado com fazer solicitações HTTP em Go é criar um aplicativo que faz solicitações para outra API REST de seu.