Cómo escribir una API REST en Go en 30 minutos: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué Go es ideal para REST API?



Go (Golang) es un lenguaje de programación compilado moderno, creado en Google. Combina el alto rendimiento de C++ con la simplicidad de Python. Si necesitas escribir rápidamente una REST API, Go es una de las mejores opciones. En este artículo crearemos una REST API completa en Go en 30 minutos, utilizando solo la biblioteca estándar net/http. Verás lo sencillo que es manejar solicitudes HTTP, enrutarlas y devolver respuestas JSON.



Al final del artículo, podrás escribir tu propia API que se pueda desplegar en un servidor. No usaremos frameworks de terceros — solo Go puro, lo que hace que el código sea ligero y rápido.



Paso 1: Instalación de Go y creación del proyecto



Instalación de Go

Si aún no tienes Go instalado, descarga la última versión desde el sitio oficial. Sigue las instrucciones para tu sistema operativo. Después de la instalación, verifica la versión en la terminal:



go version


Deberías ver algo como go version go1.22.0 linux/amd64.



Creación del proyecto

Crea un nuevo directorio para el proyecto e inicializa el módulo Go:



mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


Ahora la estructura del proyecto está lista. Escribiremos todo el código en un solo archivo main.go para no complicar el ejemplo.



Paso 2: Servidor HTTP simple en Go



Empecemos con un servidor HTTP básico. Abre el archivo main.go y agrega el siguiente código:



package main

import ( "fmt" "log" "net/http")

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, REST API on Go!") })

log.Println("Servidor iniciado en el puerto 8080") log.Fatal(http.ListenAndServe(":8080", nil))}


Ejecuta el servidor con el comando go run main.go y abre el navegador en http://localhost:8080. Verás un mensaje de bienvenida. ¡Felicidades — tu primer servidor HTTP en Go está funcionando!



Análisis del código

  • http.HandleFunc — registra un manejador para la ruta "/".
  • http.ListenAndServe — inicia el servidor en el puerto 8080.
  • log.Fatal — muestra un error si el servidor no se inicia.


Paso 3: Agregamos enrutamiento y manejo de JSON



Ahora agregaremos soporte para el estilo REST: GET, POST, PUT, DELETE. Crearemos una simple "base de datos" en memoria (slice de estructuras) y gestionaremos una lista de tareas (todo list).



Estructura de datos

Agrega en main.go la descripción de la estructura Task y el slice global:



type Task struct {    ID   int    `json:"id"`    Name string `json:"name"`}

var tasks []Taskvar nextID int = 1


Manejadores de rutas

Crearemos el manejador principal que analizará el método HTTP y llamará a la función correspondiente:



func tasksHandler(w http.ResponseWriter, r *http.Request) {    switch r.Method {    case http.MethodGet:        getTasks(w, r)    case http.MethodPost:        createTask(w, r)    default:        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)    }}

func taskHandler(w http.ResponseWriter, r *http.Request) { // Extraemos el ID de la URL idStr := strings.TrimPrefix(r.URL.Path, "/tasks/") id, err := strconv.Atoi(idStr) if err != nil { http.Error(w, "Invalid task ID", http.StatusBadRequest) return }

switch r.Method { case http.MethodGet: getTask(w, r, id) case http.MethodPut: updateTask(w, r, id) case http.MethodDelete: deleteTask(w, r, id) default: http.Error(w, "Method not allowed", http.StatusMethodNot

Blogs

Book Recommendations