Enviar una solicitud HTTP es clave para cualquier aplicación que necesite comunicarse a través de Internet. Descubra cómo enviar una variedad de solicitudes HTTP usando Go.
Uno de los principios fundamentales que rigen el funcionamiento de la World Wide Web es el intercambio de solicitudes y respuestas. Cuando envía una solicitud para acceder a una página web, el servidor responde con los datos apropiados.
Los protocolos populares que rigen los diferentes tipos de comunicación por Internet incluyen HTTP (Protocolo de Transferencia de Hipertexto), FTP (Protocolo de transferencia de archivos), y SMTP (Protocolo simple de transferencia de correo).
HTTP es el protocolo que normalmente usará cuando vea un sitio web o use una aplicación habilitada para la web. También puede trabajar con solicitudes HTTP de muchos lenguajes de programación, incluido Go.
¿Qué es una solicitud HTTP?
HTTP define cómo los clientes, como los navegadores web, envían solicitudes a los servidores que luego devuelven una respuesta. Una solicitud HTTP contiene información sobre un recurso al que el cliente intenta acceder. El mensaje de solicitud generalmente comprende una URL que identifica el recurso y otros datos opcionales, como encabezados y parámetros de consulta.
Hay varios tipos de solicitud HTTP, incluidos GET, POST, PUT, DELETE, HEAD, OPTIONS y CONNECT. Los primeros cuatro tipos de métodos son los más comunes; reflejan las operaciones CRUD de lectura, creación, actualización y eliminación, respectivamente.
El tipo de solicitud PUT a menudo se usa indistintamente con el tipo de solicitud PATCH. Logran el mismo propósito, solo difieren en los datos que esperan que incluya la solicitud.
Envío de solicitudes utilizando métodos HTTP comunes
Go está integrado http paquete proporciona un conjunto de funciones y estructuras que puede usar para crear servidores web y administrar solicitudes HTTP. Es un paquete muy sólido y todos los marcos web de Go se basan en él de una forma u otra. Es un subpaquete de Go neto paquete.
Para crear una solicitud HTTP en Go, puede usar el http. Nueva solicitud() y establezca el método, la URL, los encabezados y el cuerpo de la solicitud apropiados. Después de crear la solicitud, puede usar el Ir red/http paquete http. Cliente{} estructura para ejecutarlo y recibir la respuesta.
Los siguientes ejemplos de código utilizan reqres.in, una API disponible públicamente para probar solicitudes HTTP. Puede usarlo para probar las solicitudes GET, POST, PUT y DELETE en sus programas Go.
Solicitud POST
El siguiente código es una función que envía una solicitud POST al /api/users endpoint de reqres.in para crear un nuevo usuario con un nombre y un trabajo.
paquete principal
importar (
"bytes"
"codificación/json"
"fmt"
"yo"
"red/http"
)funcióncrear usuario(nombre, trabajo cadena) {
fmt. imprimir("Creando usuario...")apiURL := " https://reqres.in/api/users"
datos de usuario: = []byte(`{"nombre":"` + nombre + `","trabajo":"` + trabajo + `"}`)// crea una nueva solicitud http
solicitud, error := http. Nueva solicitud("CORREO", apiUrl, bytes. Nuevo búfer (datos de usuario))
pedido. Encabezamiento. Colocar("Tipo de contenido", "aplicación/json; juego de caracteres=utf-8")// enviar la solicitud
cliente := &http. Cliente{}
respuesta, error := cliente. hacer (pedir)si error != nulo {
fmt. Imprimir (error)
}cuerpo de respuesta, error := io. Leer todo (respuesta. Cuerpo)
si error != nulo {
fmt. Imprimir (error)
}datos formateados: = formatJSON (cuerpo de respuesta)
fmt. imprimir("Estado: ", respuesta. Estado)
fmt. imprimir("Cuerpo de respuesta:", datos formateados)
// limpia la memoria después de la ejecución
aplazar respuesta. Cuerpo. Cerca()
}
formatoJSON es una función personalizada que puede escribir para formatear los datos de salida. Así es como puedes implementarlo:
// función para formatear datos JSON
funciónformatoJSON(datos []byte)cadena {
variable bytes de salida. Buffer
error: = json. Sangría(&fuera, datos, "", " ")si error! = nulo {
fmt. Imprimir (err)
}
d := fuera. bytes()
devolvercadena(d)
}
Puedes llamar al crear usuario() funcionar en un programa como este:
funciónprincipal() {
fmt. imprimir("Haciendo una solicitud POST...")
crear usuario("Tim Omolana", "Escritor")
}
Cuando ejecuta el programa en una terminal, usando el corre comando, verá un resultado como este:
OBTENER solicitud
El siguiente código es una función que envía una solicitud GET para recuperar un usuario del servidor reqres.in usando su ID única.
// principal.ir
funciónobtenerUsuario(identificación cadena) {
fmt. imprimir("Obteniendo usuario por ID...")// realizar una solicitud GET a la API para obtener el usuario por ID
apiURL := " https://reqres.in/api/users/" + identificación
solicitud, error := http. Nueva solicitud("CONSEGUIR", APIURL, nulo)si error != nulo {
fmt. Imprimir (error)
}pedido. Encabezamiento. Colocar("Tipo de contenido", "aplicación/json; juego de caracteres=utf-8")
cliente := &http. Cliente{}
respuesta, error := cliente. hacer (pedir)si error != nulo {
fmt. Imprimir (error)
}cuerpo de respuesta, error := io. Leer todo (respuesta. Cuerpo)
si error != nulo {
fmt. Imprimir (error)
}datos formateados: = formatJSON (cuerpo de respuesta)
fmt. imprimir("Estado: ", respuesta. Estado)
fmt. imprimir("Cuerpo de respuesta:", datos formateados)
// limpia la memoria después de la ejecución
aplazar respuesta. Cuerpo. Cerca()
}
Una solicitud GET no envía datos al servidor, por lo que no acepta ni envía un cuerpo de solicitud al servidor cuando se realiza. Así es como se verá una llamada de ejemplo a la función anterior:
funciónprincipal() {
fmt. imprimir("Haciendo solicitud GET...")
obtenerUsuario("2")
}
Producción:
Solicitud PUT
La solicitud PUT es muy similar a una solicitud POST porque también envía datos al servidor. La principal diferencia es que POST crea un nuevo recurso mientras que PUT actualiza uno existente.
Aquí hay una implementación de una solicitud PUT:
// principal.ir
funciónactualizarUsuario(nombre, trabajo, id cadena) {
fmt. imprimir("Actualizando usuario...")// hacer una solicitud PUT a la API para actualizar el usuario
apiURL := " https://reqres.in/api/users/" + identificación
datos de usuario: = []byte(`{"nombre":"` + nombre + `","trabajo":"` + trabajo + `"}`)// crea una nueva solicitud PUT de http
solicitud, error := http. Nueva solicitud("PONER", apiUrl, bytes. Nuevo búfer (datos de usuario))
pedido. Encabezamiento. Colocar("Tipo de contenido", "aplicación/json; juego de caracteres=utf-8")
// Cuerpo de función restante de la función createUser...
// Hacer una solicitud, obtener una respuesta y borrar la memoria...
}
A partir de este código, puede ver que las únicas diferencias entre la solicitud PUT y la solicitud POST anteriores son el nombre del método y la URL. Cuando use un PUT para actualizar los datos existentes, deberá agregar la identificación a la URL de la solicitud. Una llamada de muestra a esta función se vería así:
función principal() {
// actualizar la entrada con el ID 2.
actualizarUsuario("Tim Nombre Nuevo", "Escritor del personal", "2")
}
El código anterior actualiza al usuario y produce el siguiente resultado:
Borrar petición
Utilice el método de solicitud DELETE para realizar una operación de eliminación en un servidor web. Una solicitud de eliminación elimina el recurso identificado por el URI. Una solicitud DELETE en Go se ve así:
funciónborrar usuario(identificación cadena) {
fmt. imprimir("Eliminando usuario...")
// hacer una solicitud DELETE a la API para eliminar al usuario
apiURL := " https://reqres.in/api/users/" + identificación// crea una nueva solicitud http
solicitud, error := http. Nueva solicitud("BORRAR", APIURL, nulo)
pedido. Encabezamiento. Colocar("Tipo de contenido", "aplicación/json; juego de caracteres=utf-8")cliente := &http. Cliente{}
respuesta, error := cliente. hacer (pedir)
si error != nulo {
fmt. Imprimir (error)
}
fmt. imprimir("Estado: ", respuesta. Estado)
}
Una solicitud DELETE no acepta ni devuelve un cuerpo, por lo que no es necesario analizar o formatear el cuerpo de la solicitud y la respuesta JSON. La respuesta solo devuelve un estado para indicar éxito o fracaso. Así es como se ve una llamada de muestra a la función con su salida:
funciónprincipal() {
fmt. imprimir("Haciendo una solicitud de ELIMINAR...")
borrar usuario("2")
}
Producción:
Ahorre tiempo usando el http. Correo() y http. Conseguir() métodos de la red/http paquete para hacer CORREO y CONSEGUIR solicitudes directamente, sin tener que utilizar el Nueva solicitud() función y la Cliente{} estructura para crear y hacer la solicitud por separado. Revisar la documentación de red/http para más información.
Realización de solicitudes HTTP en aplicaciones Go
El http El paquete en Go proporciona todo lo necesario para realizar solicitudes HTTP y manejar respuestas en aplicaciones Go. Las funciones y estructuras proporcionadas por el paquete le permiten crear y enviar diferentes tipos de solicitudes como GET, POST, PUT, DELETE y muchas más.
Esto facilita la creación de aplicaciones web en Go que pueden interactuar con otros servicios web y API. una buena manera de conseguir más familiarizado con la realización de solicitudes HTTP en Go es mediante la creación de una aplicación que realiza solicitudes a otra API REST de tuyo.