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 (o Golang) es un lenguaje de programación compilado moderno, creado en Google. Combina el rendimiento de C++ con la simplicidad de Python, lo que lo convierte en la elección ideal para crear servicios web de alta carga y REST API. A diferencia de muchos otros lenguajes, Go tiene soporte integrado para servidor HTTP, concurrencia y compilación rápida.



En esta guía, crearemos paso a paso una REST API completa para gestionar una lista de tareas (Todo List). Aprenderás a:

  • Configurar un servidor HTTP en Go
  • Trabajar con solicitudes y respuestas JSON
  • Implementar operaciones CRUD (Create, Read, Update, Delete)
  • Probar la API con curl o Postman


Todo el proceso te llevará no más de 30 minutos. ¡Vamos allá!



1. Instalación y configuración del proyecto



Antes de escribir código, asegúrate de tener Go instalado. Puedes verificarlo con el comando:

go version


Si Go no está instalado, descarga la última versión desde el sitio oficial.



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

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


Ahora crea el archivo main.go — aquí estará todo nuestro código. Para facilitar el trabajo con rutas, usaremos la biblioteca estándar net/http, que ya está integrada en Go. No se requieren dependencias externas — esta es una de las principales ventajas del lenguaje.



2. Definimos la estructura de datos y el almacenamiento



Empecemos describiendo el modelo de datos. Para simplificar, almacenaremos las tareas en memoria (en un slice), no en una base de datos. Crearemos la estructura Task y un contador global de ID:



package main

import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")

// Task representa una tareatype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}

// Almacenamiento de tareas (en memoria)var ( tasks []Task nextID int = 1 mu sync.Mutex)


Observa el sync.Mutex — es necesario para el acceso seguro a los datos en entornos concurrentes, ya que el servidor Go puede procesar solicitudes en paralelo.



3. Implementación de operaciones CRUD



Ahora escribiremos los manejadores principales para cada método HTTP. Usaremos el patrón de enrutamiento por URL:

  • GET /tasks — obtener todas las tareas
  • POST /tasks — crear una nueva tarea
  • GET /tasks/{id} — obtener una tarea por ID
  • PUT /tasks/{id} — actualizar una tarea
  • DELETE /tasks/{id} — eliminar una tarea


3.1. Obtener todas las tareas (GET /tasks)

func getTasks(w http.ResponseWriter, r *http.Request) {    mu.Lock()    defer mu.Unlock()

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}


3.2. Crear una tarea (POST /tasks)

func createTask(w http.ResponseWriter, r *http.Request) {    var newTask Task    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }

mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()

w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}


3.3. Obtener, actualizar y eliminar por ID

Para estas operaciones necesitamos extraer el ID de la URL. En la biblioteca estándar de Go no hay un analizador de rutas integrado, por lo que escribiremos una utilidad simple:



                

Blogs

Book Recommendations