> Faqs > Cómo definir de una vez todas las rutas de un resource de un API en Laravel

Cómo definir de una vez todas las rutas de un resource de un API en Laravel

Hola. Estoy definiendo las rutas de un proyecto de API en Laravel. El caso es que quiero definir de una vez todas las rutas de un recurso (listados, altas, bajas modificaciones).

En lugar de tener que escribir todas las rutas con sus correspondientes llamados a los métodos de cada una ¿se puede definir de una vez todas de una vez?

Mi resource quiero que se llame "customers" y lo atienda el controlador "CustomerController".

Respuestas

Sin problema, puedes usar el método apiResource de Route. El código que tienes que escribir en el archivo de rutas de api.php es el siguiente:

Route::apiResource('customers', CustomerController::class);

No te olvides de importar el controlador en la página del archivo de rutas. Esto suponiendo que el controlador CustomerController ya exista.

Nota que existe otro método que se llama Route::resource pero este método no es el más adecuado porque te crea rutas que no vas a utilizar en un API, como la ruta que hace el mostrado de un supuesto formulario donde se escribirían los datos de un recurso que quieres dar de alta. Eso no forma parte del API.

Además, dicho sea de paso, para que te encajen todas las rutas con los métodos adecuados del controlador, en el caso que las rutas de recurso las hayas hecho todas de una, se recomienda que crees un controlador de recurso también.

Esto lo consigues con este comando de Artisan:

php artisan make:controller CustomerController --api

Nota que hay otro comando similar de Artisan que te crea todos los métodos de un recurso sin ser de API. php artisan make:controller CustomerController -r. El problema de este comando es que te crea métodos que no vas a necesitar. Los puedes borrar y listo, pero es más cómodo crear de entrada los métodos del API.

Una vez creadas estas rutas si haces un php artisan route:list verás todo el listado de rutas que se han creado para tu recurso. El listado completo de rutas que se han creado lo tienes aquí.

GET|HEAD        api/customers .............. customers.index › CustomerController@index
POST            api/customers .............. customers.store › CustomerController@store
GET|HEAD        api/customers/{customer} ... customers.show › CustomerController@show
PUT|PATCH       api/customers/{customer} ... customers.update › CustomerController@update
DELETE          api/customers/{customer} ... customers.destroy › CustomerController@destroy

De todos modos, habría que valorar la posiblidad de escribir las rutas a mano porque hay equipos de desarrollo que prefieren tener los controladores de cada endpoint independientes. Sobre todo en el caso que tengas que escribir la documentación de los endpoints en el propio controlador puede ser interesante que lo tengas por separado por la cantidad de código y por la trazabilidad.

Miguel Angel
3295 146 215 17