Una API puede considerarse como un conjunto de funciones y rutinas diseñadas para ser utilizadas por otro software, lo que ofrece una gran ventaja a la hora del desarrollo de aplicaciones multiplataforma pues de esta forma podemos concentrar toda la lógica del negocio en un solo lugar accesible desde muchas otras aplicaciones o programas.

Cuando se habla de desarrollo de aplicaciones web y específicamente de desarrollo de una  API para la web aparece el término REST (Representational State Transfer)

REST es un estilo de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web

Cuya definición en un sentido más amplio se usa para:

Describir cualquier interfaz entre sistemas que utilice directamente HTTP para obtener datos o indicar la ejecución de operaciones sobre los datos, en cualquier formato (XML, JSON, etc)

De ahí el término API REST, dónde se engloban todas aquellas aplicaciones diseñadas para ser accesibles desde otros programas a través  del protocolo web.

Estructura de una API REST

La estructura de una API REST se centra en el uso de recursos a los cuales se puede acceder de forma externa, dichos recursos son representados por sustantivos tales como usuario, transaccióncategoría, etc.

Las peticiones http a cada recurso vendrían dadas de la siguiente manera

http://www.myapi.dev/users/{params}
http://www.myapi.dev/categories/{params}

De esta forma podemos garantizar una estructura legible y fácil de entender. Como puedes ver en este caso es muy importante la estructura de las rutas de nuestra API para facilitar el acceso a los recurso, por lo cual se debe tener en cuenta de igual formal el tipo de petición (GET, POST, PUT, DELETE). Una mala práctica es usar una url para cada petición como se muestra a continuación:

GET    http://myapp.dev/get-user/{id}           // Obtener los datos de un usuario
POST   http://myapp.dev/create-user/{params}    // Crear un nuevo usuario
PUT    http://myapp.dev/update-user/{id}        // Actualizar un usuario 
DELETE http://myapp.dev/delete-user/{id}        // Eliminar un usuario

Lo correcto sería utilizar la siguiente estructura:

GET    http://myapp.dev/user/{id}        // Obtener los datos de un usuario
POST   http://myapp.dev/user/{params}    // Crear un nuevo usuario
PUT    http://myapp.dev/user/{id}        // Actualizar un usuario 
DELETE http://myapp.dev/user/{id}        // Eliminar un usuario

Para más información visita  Formularios y rutas POST, PUT y DELETE con Laravel

API REST con Laravel

Veamos cómo crear la estructura básica de una API REST utilizando Laravel, para ello vamos a crear un nuevo proyecto llamado «Laravel»:

$ composer create-project laravel/laravel Laravel

El componente de rutas de Laravel ofrece todo lo que necesitamos para estructurar nuestra API y gracias al uso de los recursos ( Route::resource() ) podemos crear una colección de rutas para cada recurso en una sola línea de código.

Antes de continuar es recomendable que tengas creado un virtualhost para tu proyecto, si no sabes como hacerlo visita nuestra sección de Instalación y configuración de entornos dónde encontraras varios tutoriales que te pueden ayudar.

Veamos el archivo app/Http/routes.php y dentro de él vamos a crear un nuevo recurso para usuarios:

Route::resource('user', 'UserController');

Ahora debemos crear un controlador llamado UserController:

$ php artisan make:controller UserController

Tal vez te has dado cuenta que cuando creamos controladores de esta manera se crean varias funciones vacías, por ejemplo si entras al archivo app/Http/Controllers/UserController.php verás algo como esto:

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        //
    }
...

En tu archivo habrán unas cuantas funciones más, como puedes ver, debidamente comentadas, pero ¿Para qué sirve esto? Bueno, recuerda que anteriormente creamos un recurso en el archivo routes.php, si entramos en el directorio del proyecto desde la consola y ejecutamos el siguiente comando podremos ver la lista de rutas disponibles en la aplicación.

$ php artisan route:list

api-rest-routes

Como puedes apreciar se ha creado un conjunto de rutas para el recurso «user» que apuntan a cada uno de las funciones correspondientes en el archivo UserController.php. Recuerda que cuando creamos una API es con la finalidad de que sea accesible desde otro programa, por lo cual métodos como create, update (GET) no son necesarios ya que estos se encargan sólo de mostrar un formulario o una vista, por lo cual tal vez la mejor opción sería excluir estas rutas; esto lo podemos hacer editando el archivo routes.php:

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

Veamos como cambiaron nuestras rutas:

$ php artisan route:list

route-list

De esta forma, creando nuevos recursos a través de las rutas, tendrás una estructura mucho más organizada y estandarizada para tu API, por supuesto hasta el momento no hemos agregado ninguna lógica a cada función, ese tema será tratado en las próximas lecciones. Por ahora te invito a que pruebes lo aprendido.

Si te gusto esta lección por favor comparte en redes sociales, no olvides que puedes dejar tu comentarios y dudas más abajo.

Material relacionado

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

Lección siguiente API REST con Laravel 5.1 - CRUD de usuarios