Rutas Resource y Rutas API en Laravel: Diferencias y Uso

Introducción a las rutas RESTful en Laravel

Laravel ofrece herramientas integradas para definir rápidamente conjuntos completos de rutas siguiendo el patrón RESTful. Las más utilizadas son Route::resource y Route::apiResource. Aunque ambas generan endpoints para operaciones CRUD, están diseñadas para contextos difernetes: aplicaciones web tradicionales frente a APIs sin estado.

Rutas Resource para Aplicaciones Web

El método Route::resource crea un conjunto completo de rutas que incluye acciones para mostrar formularios (como crear o editar), además de las operaciones básicas sobre recursos. Es ideal cuando trabajas con vistas Blade y necesitas manejar estados mediante sesiones.

use Illuminate\Support\Facades\Route;
Route::resource('articulos', 'ArticuloController');

Este comando genera 7 rutas con los siguientes comportamientos:

Método HTTP URI Acción Nombre de ruta
GET /articulos index articulos.index
GET /articulos/create create articulos.create
POST /articulos store articulos.store
GET /articulos/{articulo} show articulos.show
GET /articulos/{articulo}/edit edit articulos.edit
PUT/PATCH /articulos/{articulo} update articulos.update
DELETE /articulos/{articulo} destroy articulos.destroy

Estas rutas se registran dentro del grupo web, lo que implica que heredan funcionalidades como protección CSRF, gestión de sesiones y cookies de autenticación.

Rutas API Resource para Servicios REST

Cuando construyes una API, no necesitas rutas que sirvan formularios HTML. En su lugar, solo requieres endpoints que respondan con datos estructurados (por ejemplo, JSON). Para este caso, Laravel proporciona Route::apiResource.

Route::apiResource('articulos', 'ArticuloController');

Esta variante omite automáticamente las acciones create y edit, ya que estas están orientadas a interfaces visuales. El resultado es un conjunto más ligero de 5 rutas:

Método HTTP URI Acción Nombre de ruta
GET /articulos index articulos.index
POST /articulos store articulos.store
GET /articulos/{articulo} show articulos.show
PUT/PATCH /articulos/{articulo} update articulos.update
DELETE /articulos/{articulo} destroy articulos.destroy

Las rutas generadas por apiResource normalmente se definen dentro del grupo api, que utiliza middleware como throttle, auth:sanctum o bindings, pero excluye mecanismos de sesión o CSRF.

Diferencias Clave

  • Recursos visuales: resource incluye create y edit; apiResource no.
  • Middleware: resource usa el grupo web; apiResource se asocia al grupo api.
  • Respuestas: Los controladores para API generalmente devuelven JSON; los web retornan vistas.

Ejemplo de Controlador para API

Un controlador optimizado para API puede lucir así:

class ArticuloController extends Controller
{
    public function index()
    {
        return response()->json(Articulo::all());
    }

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

    public function show(Articulo $articulo)
    {
        return response()->json($articulo);
    }

    public function update(Request $request, Articulo $articulo)
    {
        $articulo->update($request->all());
        return response()->json($articulo);
    }

    public function destroy(Articulo $articulo)
    {
        $articulo->delete();
        return response()->noContent();
    }
}

Observa el uso de inyección automática de modelos y respuestas JSON explícitas, comunes en APIs modernas.

Conclusión

La elección entre Route::resource y Route::apiResource depende del tipo de aplicación que estés desarrollando. Si tu proyecto entrega contenido HTML y maneja estados, opta por la versión completa. Si estás creando un backend para consumo por SPA, móviles o terceros, apiResource es más limpio y adecuado.

Etiquetas: Laravel RESTful routing API Middleware

Publicado el 9-12 18:01