1-5-¿Qué es el Protocolo HTTP?

 

¿Qué es el Protocolo HTTP?

HTTP (HyperText Transfer Protocol) es el protocolo de comunicación que permite la transferencia de información en la web. Es la base de la comunicación entre clientes (navegadores, apps) y servidores.

Anatomía de una Solicitud HTTP

Cuando haces una petición a un sitio web, esta contiene:

text
GET /usuarios HTTP/1.1
Host: mipagina.com
Content-Type: application/json
Authorization: Bearer token123
User-Agent: Mozilla/5.0...

{"nombre": "Juan"}

Partes principales:

1. Método HTTP (Verbo)

Indica la acción que queremos realizar:

  • GET: Obtener recursos (lectura)

  • POST: Crear nuevos recursos

  • PUT/PATCH: Actualizar recursos existentes

  • DELETE: Eliminar recursos

  • HEAD, OPTIONS: Para metadatos

2. URL/Path

La ruta del recurso solicitado:

text
/usuarios
/articulos/5
/api/productos

3. Headers (Cabeceras)

Metadatos sobre la solicitud:

http
Content-Type: application/json
Authorization: Bearer tu_token
Accept: application/json
User-Agent: Mozilla/5.0...

4. Body (Cuerpo)

Datos que enviamos (en POST, PUT, PATCH):

json
{
  "nombre": "María",
  "email": "maria@ejemplo.com"
}

HTTP en Laravel

1. Rutas y Métodos HTTP

En routes/web.php o routes/api.php:

php
// GET - Obtener usuarios
Route::get('/usuarios', [UserController::class, 'index']);

// POST - Crear usuario
Route::post('/usuarios', [UserController::class, 'store']);

// PUT - Actualizar usuario completo
Route::put('/usuarios/{id}', [UserController::class, 'update']);

// DELETE - Eliminar usuario
Route::delete('/usuarios/{id}', [UserController::class, 'destroy']);

// Múltiples métodos
Route::match(['get', 'post'], '/ruta', function() {
    // Lógica
});

// Cualquier método
Route::any('/cualquier', function() {
    // Lógica
});

2. Trabajando con Request en Laravel

Accediendo a datos del Request:

php
use Illuminate\Http\Request;

Route::post('/usuarios', function(Request $request) {
    // Obtener todos los datos
    $datos = $request->all();
    
    // Obtener un campo específico
    $nombre = $request->input('nombre');
    $email = $request->email; // También así
    
    // Obtener headers
    $userAgent = $request->header('User-Agent');
    $token = $request->bearerToken();
    
    // Obtener información de la URL
    $path = $request->path(); // /usuarios
    $url = $request->url(); // URL completa
    $method = $request->method(); // POST
    
    return response()->json([
        'nombre' => $nombre,
        'metodo' => $method
    ]);
});

En Controladores:

php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        // Validación de datos
        $validated = $request->validate([
            'nombre' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8'
        ]);
        
        // Crear usuario con datos validados
        $user = User::create($validated);
        
        return response()->json($user, 201); // Código 201 Created
    }
    
    public function show(Request $request, $id)
    {
        $user = User::findOrFail($id);
        
        // Verificar si el cliente acepta JSON
        if ($request->wantsJson()) {
            return response()->json($user);
        }
        
        return view('users.show', compact('user'));
    }
}

3. Headers en Laravel

php
public function miMetodo(Request $request)
{
    // Leer headers
    $contentType = $request->header('Content-Type');
    $authorization = $request->header('Authorization');
    
    // En respuesta, establecer headers
    return response()
        ->json(['data' => 'valor'])
        ->header('X-Custom-Header', 'Valor')
        ->header('Cache-Control', 'no-cache');
}

4. Respuestas HTTP

php
// Respuesta JSON simple
return response()->json(['user' => $user]);

// Con código de estado
return response()->json(['error' => 'No encontrado'], 404);

// Redirección
return redirect('/usuarios');

// Vista
return view('usuarios.index', compact('usuarios'));

// Respuesta personalizada
return response('Contenido', 200)
    ->header('Content-Type', 'text/plain');

Ejemplo Completo: API REST

php
// routes/api.php
Route::apiResource('usuarios', UserController::class);

// app/Http/Controllers/UserController.php
class UserController extends Controller
{
    public function index(Request $request)
    {
        // Paginación con parámetros de query
        $perPage = $request->query('per_page', 15);
        $users = User::paginate($perPage);
        
        return response()->json($users);
    }
    
    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8'
        ]);
        
        $user = User::create($validated);
        
        return response()->json($user, 201);
    }
    
    public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        
        $validated = $request->validate([
            'name' => 'sometimes|required',
            'email' => 'sometimes|required|email|unique:users,email,'.$id
        ]);
        
        $user->update($validated);
        
        return response()->json($user);
    }
    
    public function destroy($id)
    {
        $user = User::findOrFail($id);
        $user->delete();
        
        return response()->json(null, 204); // 204 No Content
    }
}

Códigos de Estado HTTP Importantes

  • 200 OK: Éxito

  • 201 Created: Recurso creado

  • 204 No Content: Éxito sin contenido

  • 400 Bad Request: Solicitud mal formada

  • 401 Unauthorized: No autenticado

  • 403 Forbidden: No tiene permisos

  • 404 Not Found: Recurso no encontrado

  • 422 Unprocessable Entity: Validación falló

  • 500 Internal Server Error: Error del servidor

Consejos Prácticos

  1. Usa los métodos HTTP correctamente según la acción

  2. Valida siempre los datos entrantes

  3. Usa códigos de estado apropiados

  4. Sé consistente en tus respuestas

  5. Documenta tu API con los métodos y rutas

¿Te gustaría que profundice en algún aspecto específico como validación, autenticación JWT, o algún otro tema relacionado?

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas