Como construir una API con Laravel

Como es de esperarse del mayor Framework PHP más popular actualmente (Tal es el caso de Laravel); puedes hacer un Web Services o API (Interfaz de programación de aplicaciones).

construir api en laravel con lumen

Pero como es de esperarse de todo Framework que está en progreso, Laravel ha sacado desde hace algún tiempo para acá un mini-framework llamado Lumen (Cuyo núcleo del framework es el mismo que el de Laravel, solo que sirve únicamente para hacer APIs por dejarle únicamente ese módulo disponible).

Por tal motivo, si tienes intenciones de desarrollar una API con Laravel, lo más recomendable es que lo hagas con Lumen y esto es lo que os enseñaremos en este tutorial.

 

Como crear una API o Servicio Web con Lumen

Lo primero que tienes que hacer es instalarlo y pues para hacerlo es muy sencillo y por no tratarse de este tema, no lo explicaremos en esta entrada.

Una vez instalado, si todo ha ido bien; entonces al probar la ruta principal de tu proyecto, notarás la versión de Lumen.

localhost 8000 laravel lumen navegador

Entonces, lo que necesitamos hacer es crear una ruta para cada una de las operaciones de un CRUD (Create Read Update Delete) en el archivo de routes.php (/app/Http/routes.php).

Para empezar, iniciaremos desarrollando el método Read, uno de los más fáciles. El método resultaría así:

//READ
$app->get('/scores', function () use ($app) {
	return response->json("ruta /scores");
});
routes.php
construir una api en laravel lumen routes

Captura del código anterior de routes.php para construir una API en Laravel con Lumen.

Lo probamos en el navegador, accediendo a la siguiente ruta: localhost:8000/scores

construir una api en laravel lumen

Resultado en el navegador de la API en Laravel con Lumen.

Observamos como el navegador obtiene el valor que hemos solicitado en formato JSON.

 

Luego que hemos probado que todo esté funcionado perfectamente. Vamos a traer datos reales de una base de datos; para hacerlo, lo primero que tenemos que hacer es crear una Base de Datos y junto con ella una Tabla. A continuación especificamos los detalles:

Nombre de la base de datos: lumen

construir una api en laravel lumen

Crear base de datos con phpmyadmin.

Nombre de la tabla: scores

Campos de la tabla:

  • id (int[11], autoincrement)
  • name (varchar[100])
  • points (int[11])
  • created_at (timestamp)
  • updated_at (timestamp)
construir una api en laravel lumen

Creación de los campos de la tabla en phpmyadmin.

Luego de esto, para poder obtener los registros de la tabla “scores” por medio de Lumen (Laravel); tenemos que crear un Modelo, el cual llamaremos “Score.php”. Antes de ello, debes saber que Lumen, al igual que Laravel, tiene un lugar específico donde crear los modelos de la base de datos, ésta carpeta es “app”. El resultado de la ruta completa sería: “app/Score.php”.

construir una api en laravel lumen

construir una api en laravel lumen

Dentro del archivo Score.php, programaremos nuestro modelo Score; para ello escribimos el siguiente código:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Score extends Model {
	protected $table = 'scores';
	protected $guarded = ['id'];
}
Score.php
construir una api en laravel lumen

Archivo Score.php – Construir un API en Laravel Lumen.

Luego, comentamos la línea de prueba que habíamos escrito en el archivo “routes.php”, siendo el siguiente el resultado:

//READ
$app->get('/scores', function () use ($app) {
	//return response()->json("ruta /scores");
	return response()->json(App\Score::all());
});
routes.php
construir una api en laravel lumen

Archivo routes.php – Construir una API en Laravel con Lumen.

Lo anterior es con el objetivo de llamar a los datos reales que tengamos en la tabla “scores” de la base de datos “lumen” que acabamos de crear.

Por otro lado, en Lumen hay que habilitar una opción que por defecto viene deshabilitada. La opción es para habilitar el uso de Eloquent en nuestro proyecto. Para hacerlo, tenemos que dirigirnos al siguiente archivo “bootstrap/app.php” y descomentaremos la siguiente línea:

/* ESTA ES LA LINEA QUE HAY QUE DESCOMENTAR */
//$app->withEloquent();
app.php
construir una api en laravel lumen

Archivo app.php – Construir una API en Laravel con Lumen.

Con esto hecho, ya podemos probar nuestro código utilizando la siguiente ruta en el navegador:  http://localhost/zombie/public/scores o si tenemos un servidor arrancado con artisan: http://localhost:8000/scores

construir una api en laravel lumen

Resultado en el navegador – Construir una API en Laravel con Lumen.

Como de momento no tenemos ningún registro en la tabla “scores”, nos debe salir un array de JSON vacío. Para probar que todo vaya bien y funcionando; insertaremos datos de pruebas:

construir una api en laravel lumen

Datos insertados para obtener con el metodo get de la API construida en Laravel con Lumen.

Cuando refresquemos el navegador, nos debe salir el siguiente resultado:

construir una api en laravel lumen

Resultado en el navegador – Construir una API en Laravel con Lumen.

 

construir una api en laravel lumen

Resultado en el navegador – API en Laravel con Lumen.

Si todo va bien hasta ahora, procedemos a hacer el método Create, el cual nos servirá para crear desde nuestra aplicación un nuevo registro en la tabla “scores”. Así que creamos nuestro método en el archivo “routes.php”.

//CREATE
$app->post('/scores/new_score', function (Request $request) use ($app) {
	$new_score = new Score();
	
	$new_score->name = $request->input('name');
	$new_score->points = $request->input('points');

	if($new_score->save()) {
		return response()->json($new_score);
	}else{
		return response()->json("error");
	}

});
routes.php
construir una api en laravel lumen

Archivo routes.php – Construir una API en Laravel con Lumen.

Para poder probar nuestro código, utilizaremos una extensión de navegador llamado getpostman; si utilizamos Google Chrome, esta es la extensión: https://chrome.google.com/webstore/detail/postman-rest-client/fhbjgbiflinjbdggehcddcbncdddomop

Una vez instalada la extensión, la ejecutamos y nos saldrá la siguiente aplicación de navegador:

construir una api en laravel lumen

getpostman – Construir API en Laravel con Lumen.

Nos registramos gratuitamente con nuestra cuenta de Google o con el procedimiento normal. Cuando lo hagamos, nos saldrá la siguiente pantalla.

construir una api en laravel lumen

getpostman – Construir una API en Laravel con Lumen.

En el campo “Enter request URL”, insertamos la siguiente dirección: http://localhost/zombie/public/scores

Nos cercioramos de que el tipo de solicitud sea GET

construir una api en laravel lumen

Le damos al botón “Save” (Guardar)

construir una api en laravel lumen

Creamos una nueva Colección, rellenando el campo Collection:

construir una api en laravel lumen

Le damos clic a “Save” nuevamente y nos dirigimos a la pestaña “Collections” (Colecciones). En esta pestaña podemos observar cómo se listan las solicitudes agrupadas en nuestra “Colección Lumen”.

construir una api en laravel lumen

Para probar que todo esté correctamente con el método get, le damos al botón “Send” (Enviar) y veremos cómo nos devuelve la respuesta de la solicitud, tal como lo hace el navegador.

construir una api en laravel lumen

Ahora haremos lo mismo con el método post que hemos creado para guardar los “scores” en nuestra base de datos.

Haremos el mismo procedimiento, colocaremos la URL del método post: http://localhost/zombie/public/scores/new_score; validamos que la solicitud al servidor sea del tipo POST.

construir una api en laravel lumen

Damos clic en “Params” (Parámetros) y agregamos los siguientes datos:

construir una api en laravel lumen

Para probar que todo esté bien, le damos clic en “Send” (Enviar). Nos debe salir la siguiente pantalla que contiene la nueva instancia de $new_score que hemos creado:

construir una api en laravel lumen

Si todo te ha salido de perlas, ahora seguimos con el método UPDATE. Para crearlo, utilizamos el siguiente código:

//UPDATE
$app->post('/scores/edit', function (Request $request) use ($app) {
	$findObject = Score::where('name', '=', $request->input('name'))->first();

	if($findObject != null){
		$findObject->points = $request->input('points');


		if($findObject->save()){
			return response()->json($findObject);
		}else{
			return response()->json("Error al Actualizar");
		}
	}else{
		return response()->json("El nombre no se encuentra");
	}
});
routes.php
construir una api en laravel lumen

Archivo routes.php – Construir una API en Laravel con Lumen.

Para probar nuestro método de actualizar los puntos de un usuario, lo hacemos de igual manera con getpostman, utilizando la URL http://localhost/zombie/public/scores/edit, le agregamos 2 parámetros (“name” y “points”) donde “name” debe existir y “points” es el nuevo puntaje para ese usuario que existe; lo guardamos y probamos.

construir una api en laravel lumen

Si todo va bien, debe salir el siguiente pantallazo al probarlo:

construir una api en laravel lumen

Probamos con otro puntaje:

construir una api en laravel lumen

Colocamos un nombre que no existe y podemos observar como el sistema nos devuelve los datos de error; indicándonos que no existe ese nombre:

construir una api en laravel lumen

Ahora, para culminar con nuestra API en Lumen (Laravel), crearemos el método DELETED en “routes.php”. El código sería el siguiente:

//DELETE
$app->post('/scores/delete', function (Request $request) use ($app) {
	$findObject = Score::where('name', '=', $request->input('name'))->first();

	if($findObject != null){

		if($findObject->delete()){
			return response()->json("El nombre se ha eliminado correctamente");
		}else{
			return response()->json("Error al Actualizar");
		}
	}else{
		return response()->json("El nombre no se encuentra");
	}
});
routes.php

construir una api en laravel lumen

Ahora probaríamos el método de borrar utilizando la siguiente URL: http://localhost/zombie/public/scores/delete

construir una api en laravel lumen

Y al probarlo, observamos como elimina perfectamente el registro de la tabla Score que le indicamos (En nuestro ejemplo, el valor del parámetro “name” es “pedrito”).

construir una api en laravel lumen

Si observamos en nuestra base de datos, efectivamente se ha eliminado a “pedrito” de la tabla “scores”.

construir una api en laravel lumen

Si buscamos a un “name” que no existe, el sistema nos alertará que el usuario no se encuentra (Buscaremos al mismo “pedrito” que ha sido eliminado recientemente por nuestra API en Lumen):

construir una api en laravel lumen

 

De esta manera, hemos podido culminar nuestra API en Lumen o Laravel satisfactoriamente. Podemos utilizar esta API perfectamente con otros sistemas, incluso si son escritos en otros lenguajes. Solo necesitaremos las URL en donde desplegamos el servicio web en Lumen (Laravel).

 

 

 

Guardado en : Tutoriales, Windows Etiquetas: , , , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *