api-rest-laravel-5-1-versionando-api

Cuando desarrollamos una API REST es una buena práctica manejar todos los cambios de funcionalidades de la misma a través de versiones que se manejan como un parámetro en la url de la misma, de tal forma un cliente puede hacer peticiones a cualquiera de las versiones de la API que esté utilizando.

En Laravel esto se puede gestionar muy fácilmente gracias al uso del componente de rutas con el cual podemos agrupar una serie de ellas bajo un mismo prefijo que podemos utilizar para visionar nuestra API.

Prefijos de rutas en Laravel

Como te mencionaba anteriormente es la funcionalidad que nos permite agrupar una serie de rutas bajo un prefijo o «segmento» de url.

Route::group(['prefix' => 'v1'], function () {
    Route::get('users', 'UsersController@getUser'});
});

Route::group(['prefix' => 'v2'], function () {
    Route::get('users', 'UsersController@getUser'});
    Route::get('users-profile', 'UsersController@getUser'});
});

En este ejemplo tenemos dos rutas users y users-profile, pero ambas bajo un prefijo diferente, en tal caso cada ruta pertenece a una versión diferente de la API, la funcionalidad definida para la ruta users-profile estará disponible sólo para la versión 2 (v2) de la API mientras que la función «users» estará disponible para ambas versiones (v1 y v2).

En este caso las peticiones correspondientes podrían ser:

// Para la versión 1

laravel.app/v1/users

//para la version 2

laravel.app/v2/users
laravel.app/v2/users-profile

Actualmente el archivo de rutas de nuestro proyecto tenemos lo siguiente:

Route::resource('user', 'UserController',
                ['only' => ['index', 'store', 'update', 'destroy', 'show']]);

Vamos a agrupar esta ruta bajo un prefijo «v1» indicando que se trata de la primera versión de la API:

Route::group(['prefix' => 'v1'], function () {
    Route::resource('user', 'UserController',
                    ['only' => ['index', 'store', 'update', 'destroy', 'show']]);
});

Podemos probar esto haciendo uso de Postman para obtener los datos del usuario con id=1 /(laravel.app/v1/user/1)

api-version-route-prefix-group

Ahora debemos indicar el prefijo con la versión de la API, de lo contrario vamos a recibir el siguiente error:

api-not-found

Vamos a agregar una nueva funcionalidad para la versión 2 que permita obtener la lista de nombres de los usuarios registrados, para ello agregamos al archivo UsersController.php la siguiente función:

    public function names()
    {
        return user::all()->lists('name');
    }

Posteriormente editamos el archivo routes.php nuevamente para agregar la versión 2:

Route::group(['prefix' => 'v1'], function () {
    Route::resource('user', 'UserController',
                    ['only' => ['index', 'store', 'update', 'destroy', 'show']]);
});

Route::group(['prefix' => 'v2'], function () {
    Route::resource('user', 'UserController',
                    ['only' => ['index', 'store', 'update', 'destroy', 'show']]);
    Route::get('users/names', 'UserController@names');
});

Ahora podemos obtener la lista de usuarios en la versión 2 ingresando a larave.app/v2/users/names

laravel-api-version-2-request

Esto ha sido todo por ahora, espero que esto te sea de gran utilidad. No olvides dejar tus dudas en la sección de comentarios y compartir el contenido en las redes sociales.

Si no estás al día con el progreso de esta serie te invito a visitar las publicaciones anteriores:

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior API REST en Laravel 5.1 - Peticiones JSON con Postman