🧩 Rutas y controladores para APIs

🧩 Rutas y controladores para APIs

Cómo conectar tus endpoints con controladores API

Laravel separa las rutas web (web.php) y las rutas API (api.php). Las rutas definidas en routes/api.php no usan sesiones ni cookies, y están optimizadas para respuestas JSON. Cada ruta API apunta normalmente a un método dentro de un controlador que gestiona la lógica del recurso.

📘 Estructura básica de una ruta API

En Laravel, las rutas API se definen con el archivo routes/api.php. A diferencia de las rutas web, éstas ya tienen prefijo /api por defecto.

routes/api.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\ProductController;

Route::get('/products', [ProductController::class, 'index']);
Route::get('/products/{id}', [ProductController::class, 'show']);
Route::post('/products', [ProductController::class, 'store']);
Route::put('/products/{id}', [ProductController::class, 'update']);
Route::delete('/products/{id}', [ProductController::class, 'destroy']);
      

🔹 Laravel incluye el prefijo /api automáticamente, por lo que la ruta completa sería https://tusitio.com/api/products.

⚙️ Controlador API de ejemplo

Cada ruta apunta a un método dentro de un controlador. Por convención, los controladores de API se ubican en app/Http/Controllers/Api/.

app/Http/Controllers/Api/ProductController.php
json(Product::all(), 200);
    }

    public function show($id) {
        $product = Product::find($id);
        if (!$product) {
            return response()->json(['message' => 'Producto no encontrado'], 404);
        }
        return response()->json($product, 200);
    }

    public function store(Request $request) {
        $product = Product::create($request->all());
        return response()->json($product, 201);
    }

    public function update(Request $request, $id) {
        $product = Product::find($id);
        if (!$product) return response()->json(['error' => 'No existe'], 404);
        $product->update($request->all());
        return response()->json($product, 200);
    }

    public function destroy($id) {
        $product = Product::find($id);
        if (!$product) return response()->json(['error' => 'No encontrado'], 404);
        $product->delete();
        return response()->json(['message' => 'Eliminado correctamente'], 200);
    }
}
?>
      

🧩 Demo visual: conexión ruta → controlador → respuesta

Selecciona una ruta para ver qué método del controlador se ejecuta y la respuesta simulada:

✅ Buenas prácticas

  • Define todas tus rutas API dentro de routes/api.php.
  • Usa controladores dedicados (por ejemplo, ProductController) en lugar de closures.
  • Utiliza php artisan make:controller NombreController --api para generar controladores optimizados para APIs.
  • Devuelve siempre JSON y códigos HTTP correctos (200, 201, 404, 422, etc.).

Publicar un comentario

0 Comentarios