Rutas API. Utilizar un subdominio en Laravel 5.4

Rutas API Laravel 5.4

Modificando el comportamiento de nuestras rutas API.

Como sabéis desde la versión 5.3 de Laravel, las rutas están separadas en dos archivos, web.php y api.php los cuales residen en el directorio routes/ , estos ficheros de rutas traen consigo una configuración predeterminada y definida en los middleware correspondientes. Puedes consultar y variar dichas configuraciones en el fichero Kernel.php en el directorio app/Http/Middleware/.

Este código está preparado para la versión 5.4 pero con unas ligeras modificaciones servirá también para la versión 5.3

En esta ocasión nos centraremos en el fichero api.php que será el encargado de contener las rutas de nuestro API Rest, ya que nuestra misión es conseguir alterar el comportamiento que Laravel trae por defecto y que dichas rutas atiendan a nuestro api cuando éste reside en un subdominio, como por ejemplo api.laraveles.com y no en un segmento de la ruta como www.laraveles.com/api

Lo primero que buscaremos es dónde se asignan dichas estrategias, y viendo el código que trae consigo Laravel, nos fijamos en un fichero que se denomina RouteServiceProvider.php y que como seguramente ya habrás pensado, reside en app/Providers en el directorio de nuestra aplicación. Este fichero es llamado cuando se inicia el framework y se encarga de establecer que formato debe tener la ruta para que sea atendida por web.php o por api.php. Veamos el código de la función mapApiRoutes().

Primer cambio, pero no definitivo.

Como véis el código indica que atienda a una petición con un prefix definido como api, pero ¿como debemos hacer para que atienda a un subdominio api. en su lugar? Pues bien sencillo, sólo hemos de realizar los cambios mostrados a continuación:

Cambios finales

Pero, aquí hay un pequeño tropiezo. Normalmente los dominios en desarrollo y en producción no suelen ser los mismos, por lo que esto nos obligaría a estar cambiando ese código o agregar un condicional para que se cumpla en todos y cada uno de los dominios que tengamos definidos, ¿verdad?

Pues nada más lejos de la realidad, y aquí entra en escena la configuración de la aplicación. Ya la tengamos en un fichero independiente como por ejemplo config/laraveles.php como si la tenemos integrada en cualquier otro fichero de configuración, la solución pasa por incluir el siguiente código en ese fichero.

Por otro lado, deberemos definir en nuestro fichero .env el valor para la etiqueta APP_DOMAIN de la siguiente manera

Y, obviamente modificar la función mapApiRoutes para que tome el valor desde esa variable de configuración. Deberemos tener en cuenta sustituir laraveles por el nombre del fichero donde hayamos definido la variable domain.

Esto nos permitirá que las rutas de nuestro API Rest, respondan a api.laraveles.com en lugar de www.laraveles.com/api. En un futuro artículo os explicaré como realizar las rutas para que se puedan tener activas APIs con diferentes versiones basándonos en un prefijo de la ruta.

Espero que les haya gustado el artículo y que os ayude para crear código más elegante y divertido.

Comparte este artículo

Entra en la discusión y deja tu comentario