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:
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:
/usuarios
/articulos/5
/api/productos3. Headers (Cabeceras)
Metadatos sobre la solicitud:
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):
{
"nombre": "María",
"email": "maria@ejemplo.com"
}HTTP en Laravel
1. Rutas y Métodos HTTP
En routes/web.php o routes/api.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:
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
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
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
// 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
// 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
Usa los métodos HTTP correctamente según la acción
Valida siempre los datos entrantes
Usa códigos de estado apropiados
Sé consistente en tus respuestas
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
Publicar un comentario