Saltar al contenido principal

Comprender las solicitudes/respuestas HTTP 📡

Cuando visitas un sitio web o usas una aplicación, ¿cómo se comunican la computadora y el servidor? ¡Utilizan una regla llamada HTTP! Déjame explicártelo de una manera simple, incluso para principiantes.

¿Comparar HTTP con la vida cotidiana?​

Comparemos HTTP con un pedido en un restaurante.

La historia del restaurante 🍽️​

1. Cliente: "¡Pasta por favor!" (solicitud)
2. Camarero: Transmite a la cocina
3. Cocina: Prepara la pasta
4. Camarero: "¡Aquí está tu pasta!" (respuesta)
5. Cliente: Recibe la pasta

HTTP funciona igual:

1. Navegador: "¡index.html por favor!" (solicitud HTTP)
2. Servidor: Encuentra el archivo
3. Servidor: "¡Aquí está!" (respuesta HTTP)
4. Navegador: Muestra la página

Definición de HTTP​

HTTP (HyperText Transfer Protocol)

  • Reglas para el intercambio de datos entre el navegador web y el servidor
  • Protocolo = reglas acordadas
  • Método de comunicación básico de la web

Flujo de solicitud/respuesta HTTP​

┌──────────┐                                 ┌──────────┐
│ │ ── Solicitud HTTP (Request) → │ │
│Navegador │ │ Servidor │
│ │ ← Respuesta HTTP (Response) ──│ │
└──────────┘ └──────────┘

Proceso completo​

  1. Solicitud (Request): El navegador solicita algo al servidor
  2. Procesamiento (Processing): El servidor procesa la solicitud
  3. Respuesta (Response): El servidor envía el resultado al navegador
  4. Renderizado (Rendering): El navegador muestra en la pantalla

Métodos HTTP (métodos de solicitud)​

Son verbos que le dicen al servidor "cómo" hacer algo.

1. GET 📖​

"Obtener" - Solicitar datos

GET /products/123

Ejemplos:

  • Ver una página web
  • Obtener resultados de búsqueda
  • Ver lista de productos

Características:

  • Solo obtiene datos
  • No modifica los datos del servidor
  • Los datos son visibles en la URL
  • Se puede marcar como favorito

Uso real:

https://google.com/search?q=javascript
└───────┬──────┘
Parámetros GET

2. POST 📝​

"Crear" - Enviar nuevos datos al servidor

POST /users
{
"name": "Juan García",
"email": "juan@example.com"
}

Ejemplos:

  • Registro de miembros
  • Escribir una publicación
  • Hacer un pedido

Características:

  • Crea datos en el servidor
  • Los datos están en el cuerpo (Body)
  • Los datos no son visibles en la URL
  • No se puede marcar como favorito

3. PUT ✏️​

"Modificar" - Reemplazar completamente los datos existentes

PUT /users/123
{
"name": "María López",
"email": "maria@example.com"
}

Ejemplos:

  • Modificar todo el perfil
  • Modificar toda la publicación

4. PATCH 🔧​

"Modificar parcialmente" - Cambiar solo una parte de los datos existentes

PATCH /users/123
{
"email": "newemail@example.com"
}

Ejemplos:

  • Cambiar solo el correo electrónico
  • Cambiar solo la contraseña

5. DELETE 🗑️​

"Eliminar" - Borrar datos

DELETE /users/123

Ejemplos:

  • Eliminar cuenta
  • Eliminar publicación
  • Eliminar producto

Tabla comparativa de métodos HTTP​

MétodoUsoModificación de datosUbicación de datos
GETConsulta❌URL
POSTCreación✅Body
PUTModificación completa✅Body
PATCHModificación parcial✅Body
DELETEEliminación✅URL

Estructura de una solicitud HTTP​

GET /api/users?page=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123

{Datos del cuerpo (para POST, PUT, PATCH)}

Componentes​

  1. Línea de solicitud: GET /api/users HTTP/1.1

    • Método: GET
    • Ruta: /api/users
    • Versión HTTP: 1.1
  2. Encabezados (Headers): Información adicional

    Host: ¿Qué servidor?
    User-Agent: ¿Qué navegador?
    Accept: ¿Qué formato recibir?
    Authorization: Información de autenticación
  3. Cuerpo (Body): Datos reales (POST, PUT, PATCH)

Estructura de una respuesta HTTP​

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1234

{
"id": 1,
"name": "Juan García"
}

Componentes​

  1. Línea de estado: HTTP/1.1 200 OK

    • Versión HTTP: 1.1
    • Código de estado: 200
    • Mensaje de estado: OK
  2. Encabezados (Headers): Información de respuesta

    Content-Type: ¿Qué formato?
    Content-Length: Tamaño de datos
  3. Cuerpo (Body): Datos reales

Códigos de estado HTTP 🚦​

El servidor indica "qué sucedió" con un número.

2xx - Éxito ✅​

CódigoSignificadoDescripción
200OK¡Éxito!
201CreatedRecién creado
204No ContentÉxito pero nada que enviar

3xx - Redirección 🔄​

CódigoSignificadoDescripción
301Moved PermanentlyMovido permanentemente
302FoundTemporalmente en otro lugar
304Not ModifiedNo modificado, usar caché

4xx - Error del cliente ❌​

CódigoSignificadoDescripción
400Bad RequestSolicitud incorrecta
401UnauthorizedSe requiere iniciar sesión
403ForbiddenSin autorización
404Not FoundNo encontrado
429Too Many RequestsDemasiadas solicitudes

5xx - Error del servidor 🔥​

CódigoSignificadoDescripción
500Internal Server ErrorProblema del servidor
502Bad GatewayError de puerta de enlace
503Service UnavailableServicio no disponible
Consejo

¡Consulta todos los códigos de estado en HTTP Status Guide!

Ejemplos prácticos​

Ejemplo 1: Búsqueda 🔍​

Solicitud:

GET https://google.com/search?q=javascript

Respuesta:

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<body>Resultados de búsqueda...</body>
</html>

Ejemplo 2: Inicio de sesión 🔐​

Solicitud:

POST https://api.example.com/login
Content-Type: application/json

{
"email": "user@example.com",
"password": "password123"
}

Respuesta (éxito):

HTTP/1.1 200 OK
Content-Type: application/json

{
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"name": "Juan García"
}
}

Respuesta (fallo):

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
"error": "Invalid email or password"
}

Ejemplo 3: Crear publicación ✍️​

Solicitud:

POST https://api.example.com/posts
Content-Type: application/json
Authorization: Bearer token123

{
"title": "Primera publicación",
"content": "¡Hola!"
}

Respuesta:

HTTP/1.1 201 Created
Content-Type: application/json

{
"id": 42,
"title": "Primera publicación",
"content": "¡Hola!",
"createdAt": "2025-01-23T10:30:00Z"
}

Ejemplo 4: Modificar perfil ✏️​

Solicitud:

PATCH https://api.example.com/users/me
Content-Type: application/json
Authorization: Bearer token123

{
"email": "newemail@example.com"
}

Respuesta:

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": 1,
"name": "Juan García",
"email": "newemail@example.com"
}

Ejemplo 5: Eliminar publicación 🗑️​

Solicitud:

DELETE https://api.example.com/posts/42
Authorization: Bearer token123

Respuesta:

HTTP/1.1 204 No Content

Comprender los encabezados HTTP​

Encabezados de solicitud comunes​

Content-Type: application/json    # Formato de datos enviados
Accept: application/json # Formato de datos deseados
Authorization: Bearer token123 # Token de autenticación
User-Agent: Mozilla/5.0... # Información del navegador
Cookie: session=abc123 # Cookie

Encabezados de respuesta comunes​

Content-Type: application/json    # Formato de datos de respuesta
Content-Length: 1234 # Tamaño de datos
Set-Cookie: session=abc123 # Configurar cookie
Cache-Control: no-cache # Configuración de caché
Access-Control-Allow-Origin: * # Configuración CORS

Usar herramientas HTTP​

Practicar con API Tester​

En API Tester:

  1. Ingresar URL
  2. Seleccionar método (GET, POST, PUT, DELETE)
  3. Agregar encabezados
  4. Escribir cuerpo (POST, PUT, PATCH)
  5. ¡Hacer clic en el botón Send!

Ejemplo de práctica​

Prueba de solicitud GET:

URL: https://api.github.com/users/github
Method: GET

Resultado:

{
"login": "github",
"id": 1,
"name": "GitHub",
...
}

Preguntas frecuentes (FAQ)​

P1: ¿Cuándo usar GET y POST?​

R:

  • GET: Consultar datos (solo lectura)
  • POST: Crear datos (escritura)

P2: ¿Cuál es la diferencia entre PUT y PATCH?​

R:

  • PUT: Reemplaza todo
    PUT /users/1
    {"name": "María López", "email": "maria@example.com", "age": 25}
  • PATCH: Solo modifica una parte
    PATCH /users/1
    {"email": "newemail@example.com"}

P3: ¿Por qué ocurre el error 404?​

R: ¡Cuando no se puede encontrar la página o datos solicitados!

  • Error de ortografía en la URL
  • Página eliminada
  • Ruta incorrecta

P4: ¿Qué es el error 500?​

R: ¡El servidor tiene un problema!

  • Error de código del servidor
  • Fallo de conexión a la base de datos
  • Sobrecarga del servidor

P5: ¿Qué diferencia hay entre HTTPS y HTTP?​

R: ¡Se agregó seguridad!

  • HTTP: Transmisión en texto plano (visible para todos)
  • HTTPS: Transmisión cifrada (seguro) 🔒

CRUD y métodos HTTP​

CRUD = Operaciones básicas de datos

CRUDSignificadoMétodo HTTP
CreateCrearPOST
ReadLeerGET
UpdateActualizarPUT / PATCH
DeleteEliminarDELETE

Ejemplo: Publicaciones de blog​

Ver lista de publicaciones:  GET /posts
Leer publicación: GET /posts/123
Crear publicación: POST /posts
Modificar publicación: PUT /posts/123
Eliminar publicación: DELETE /posts/123

API RESTful​

REST = Método de diseño que utiliza HTTP eficazmente

Buen diseño de API ✅​

GET    /users          # Lista de usuarios
GET /users/123 # Usuario específico
POST /users # Crear usuario
PUT /users/123 # Modificar usuario
DELETE /users/123 # Eliminar usuario

Mal diseño de API ❌​

GET  /getUsers
POST /createUser
POST /updateUser
POST /deleteUser

Próximos pasos 🚀​

Si has entendido HTTP:

  1. ✅ API Tester - Enviar solicitudes HTTP directamente
  2. ✅ HTTP Status Guide - Aprender todos los códigos de estado
  3. ✅ cURL Converter - Convertir comandos cURL
  4. ✅ ¿Qué es una API? - Revisar el concepto de API
  5. ✅ Comprender el formato de datos JSON - Datos intercambiados a través de HTTP

Conclusión​

¡HTTP es la base de la web! 🌐

Puntos para recordar:

  • GET: Consulta (lectura)
  • POST: Creación (escritura)
  • PUT/PATCH: Modificación
  • DELETE: Eliminación
  • Códigos de estado: 2xx (éxito), 4xx (error del cliente), 5xx (error del servidor)

¡Experimentando con API Tester te familiarizarás rápidamente! 🎉

Ahora, ¿entiendes cómo se comunican los sitios web y los servidores?