JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

API REST con el lenguaje GO: Todo lo que necesitas saber

Existen varios lenguajes de programación disponibles para construir APIs. Go (también conocido como Golang) está ganando cada vez más reconocimiento por su simplicidad y rendimiento.

Para recordar, una API REST (por Application Programming Interface REpresentational State Transfer) es una interfaz que permite a dos aplicaciones comunicarse entre sí utilizando solicitudes HTTP estándar. Sigue principios como el uso de recursos identificados por URIs y operaciones sin estado (stateless).

¿Por qué elegir Go para una API REST?

Go es un lenguaje moderno diseñado por Google, frecuentemente reconocido por su velocidad de ejecución y su eficiencia en la gestión de la concurrencia (en otras palabras, en la gestión del paralelismo de tareas). Estos dos aspectos lo hacen una opción ideal para construir API REST robustas y eficientes. Además, la curva de aprendizaje para desarrollar una API en Go es bastante suave, gracias a la documentación detallada disponible y a los numerosos recursos en línea.

Desarrollar una API REST en Go

1. Instalación y configuración del entorno

Antes de comenzar el desarrollo, es necesario tener Go instalado. Su última versión está disponible para descargar en esta dirección https://golang.org/. Una vez instalado Go, puedes verificar su versión con el siguiente comando desde una terminal:

				
					go version
				
			

2. Creación del proyecto

El siguiente paso consiste en crear un proyecto Go e inicializar los módulos, utilizando el siguiente comando:

				
					mkdir api-rest-go && cd api-rest-go
go mod init api-rest-go
				
			

3. Implementación de una primera ruta

Para construir una API REST, primero debemos crear rutas que respondan a diferentes solicitudes HTTP (a saber GET, POST, PUT, DELETE). El paquete nativo « net/http » de Go permite crear rutas de manera muy simple.

Creemos un simple punto de entrada a la API:

				
					package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "¡Bienvenido a una API REST en Go!")
    })
    
    http.ListenAndServe(":8080", nil)
}
				
			

En este código, utilizamos la función « HandleFunc » del paquete « net/http » para crear una ruta en la URL raíz « / » que devuelve un simple mensaje de bienvenida. « ListenAndServe » lanza un servidor HTTP en el puerto 8080.

4. Adición de una ruta GET para recuperar datos

Para una API REST, una de las operaciones más comunes consiste en recuperar datos. Añadamos una ruta GET a nuestra API.

				
					func getItems(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, "Método de solicitud no válido", http.StatusMethodNotAllowed)
        return
    }
    fmt.Fprintf(w, "Aquí están los elementos disponibles.")
}

func main() {
    http.HandleFunc("/items", getItems)
    http.ListenAndServe(":8080", nil)
}
				
			

En este paso, hemos añadido una nueva ruta « /items » que devuelve un simple mensaje indicando que los elementos están disponibles.

Gestionar los datos con solicitudes POST

Para que la API pueda recibir datos, es necesario implementar una ruta que acepte solicitudes POST. Aquí tienes un ejemplo:

				
					func createItem(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        http.Error(w, "Método de solicitud no válido", http.StatusMethodNotAllowed)
        return
    }
    fmt.Fprintf(w, "¡Elemento creado con éxito!")
}

func main() {
    http.HandleFunc("/items", getItems)
    http.HandleFunc("/items/create", createItem)
    http.ListenAndServe(":8080", nil)
}
				
			

Optimizar el rendimiento de tu API

Go, al ser un lenguaje compilado, ofrece un buen rendimiento en comparación con lenguajes interpretados. El uso de goroutines de Go también permite gestionar miles de llamadas API simultáneas sin degradación del rendimiento.

Funcionalidades avanzadas

Las funcionalidades de una API REST pueden variar en función de las necesidades de tu aplicación. Aquí hay algunas funcionalidades comunes que es posible implementar:

  • Autenticación y autorización: Implementar sistemas de autenticación, como tokens JWT y gestionar las autorizaciones.
  • Gestión de errores: Devolver códigos de retorno HTTP adecuados.
  • Paginación: Al recuperar una gran cantidad de datos, la paginación permite dividir las respuestas en trozos más pequeños, lo que mejora el rendimiento y la experiencia del usuario.
  • Filtrado y ordenamiento: Añadir parámetros para filtrar y ordenar los datos devueltos es una buena práctica para hacer la API más flexible y adaptada a las diferentes necesidades de los usuarios.
  • Caching: La caché de las respuestas, cuando no cambian frecuentemente, permite reducir la carga en el servidor y mejorar los tiempos de respuesta.
  • Validación de datos: Se aconseja validar las entradas del lado del servidor, por ejemplo, utilizando bibliotecas de validación para verificar los datos recibidos por las solicitudes POST o PUT.
  • Sitio de auditoría: Implementar un mecanismo de auditoría para mantener un registro de las actividades realizadas a través de la API permitirá saber qué acciones se han llevado a cabo, cuándo y por quién, y puede ser útil en caso de problemas o por cuestiones de conformidad.

Documentar la API

La documentación es un aspecto fundamental de toda API REST. Una documentación clara permite a los desarrolladores integrar tu API fácilmente y sin ambigüedad. Para una API REST en Go, puedes utilizar herramientas como Swagger o Postman para documentar y probar tus endpoints. Es esencial proporcionar información detallada sobre cada ruta, incluidos los métodos compatibles (GET, POST, etc.), los parámetros requeridos, las estructuras de datos esperadas y ejemplos de solicitudes/respuestas.

Conclusión

Desarrollar una API REST con Go se ha convertido en una elección cada vez más popular, especialmente cuando se buscan rendimientos aumentados y eficiencia en la gestión de recursos. Si deseas ir más lejos, también podrías explorar frameworks como Gorilla Mux que hacen la creación de rutas más flexible, o incluso implementar funcionalidades como la autenticación mediante API Key.

¿No está disponible?

Déjenos su dirección de correo electrónico para que podamos enviarle los nuevos artículos cuando se publiquen.