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
GETConsultaURL
POSTCreaciónBody
PUTModificación completaBody
PATCHModificación parcialBody
DELETEEliminaciónURL

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?