Crear APIs RestFul con Lumen

Lumen es un microframework en PHP basado en Laravel, el cual ha sido desarrollado para crear micro servicios web.

Crear proyecto

Creamos el proyecto Lumen, ejecutando lo siguiente.

composer create-project laravel/lumen=5.1 api

Configuración

Cambiaremos el nombre del archivo .env.example por .env y modificaremos los parámetros de conexión a la base de datos, para este caso estoy usando PostgreSQL, sin embargo se puede usar MySQL, SQLServer, SQLite

APP_ENV=local
APP_DEBUG=true
APP_KEY=F468UrjCmxWHBpwNvxxzA57PKV7gkzaq

APP_LOCALE=es
APP_FALLBACK_LOCALE=en

DB_CONNECTION=pgsql
DB_HOST=192.168.10.105
DB_PORT=5432
DB_DATABASE=databasename
DB_USERNAME=user_postgres
DB_PASSWORD=pass_postgres

CACHE_DRIVER=memcached
SESSION_DRIVER=memcached
QUEUE_DRIVER=database

Antes dentro de nuestra base de datos “databasename” crearemos la tabla de usuarios, como en el siguiente ejemplo.

lumen-api-table

Regresamos a nuestro proyecto y descomentamos las siguientes lineas ubicadas en el archivo “api/bootstrap/app.php”

$app = new Laravel\Lumen\Application(
	realpath(__DIR__.'/../')
);
$app->withFacades();
$app->withEloquent();

Modelos

Vamos a crear un modelo, cree el archivo Users.php bajo la carpeta App

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Users extends Model{
	protected $table = 'mdl_user';
	protected $primaryKey = 'id'
	protected $fillable = ['username', 'firstname', 'lastname', 'email'];
        protected $hidden = ['description'];
	protected $perPage = 5; 
}

Podemos usar las propiedas fillable y/o guarded. Estas propiedades te permiten especificar qué datos se asignarán al modelo en los métodos en los que se usan ‘asignamientos en masa’. Y, por tanto, qué datos se guardarán posteriormente en la base de datos.

$guarded permite especificar qué campos no queremos que se asignen al modelo. Es decir, se asignan todos excepto los especificados en este array.

Y $fillable te permite especificar qué campos sí quieres que se guarden en la base de datos. Es decir, se asignan únicamente los especificados en este array.

No confundir estas propiedades con $hidden que se usa en el proceso de serialización a JSON del modelo.

Controladores

Crearemos un controlador, crear un archivo llamado UsersController.php en la carpeta “app/Http/Controllers”

<?php
namespace App\Http\Controllers;

use App\Users;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class UsersController extends Controller{

  public function index(){
    $users = Users::all();
    return response()->json($users, 200);
  }

  public function getUser($id){
    $user = Users::find($id);
    if($user)
    {
      return response()->json($user, 200);
    } else{

    return response()->json("User not found", 404);
    } 
  }

  public function createUser(Request $request){
    $user = Users::create($request->all());  
    return response()->json($user,201);  
  }
}

Rutas

Vamos a crear un controlador, crear un archivo llamado router.php en la carpeta “app/Http”

<?php

$app->get('/', function() use ($app) {
    return $app->welcome();
});

$app->get('/users', 'UsersController@index');
$app->get('/users/{id}', 'UsersController@getUser');
$app->post('/users', 'UsersController@createUser');

Nuestra api la testeamos usando POSTMAN y haciendo las invocaciones a los verbos, como en este caso GET.

lumen-api-json

Share on FacebookTweet about this on TwitterShare on Google+

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *