lunes, 19 de noviembre de 2018

Crear una api rest con Lumen 5.7

No hay comentarios.:

Que es lumen

Lumen es un micro framework basado en laravel, al utilizar solo los componentes centrales de Laravel lo hace mas rápido y eficiente.


Requisitos

Para utilizar laravel o lumen es necesario tener instalado php de preferencia 7.1.3 en adelante.

Lumen utiliza Composer para gestionar sus dependencias. Entonces, antes de usar Lumen, asegúrese de tener Composer instalado en su máquina.

Se creara una tabla en la base de datos mysql o MariaDB por lo que se debe tener instalado una de las 2.
  • PHP
    • https://windows.php.net/download#php-7.2
    • Recuerde instalar VC15 x64 Non Thread Safe
  • Composer
    • https://getcomposer.org/download/
  • Mysql o Maria db
    • https://dev.mysql.com/downloads/mysql/
    • https://downloads.mariadb.org/

Objetivo

Crear una api para acceder a la tabla Categorias.



Crear proyecto


Primero descargue el instalador de lumen (solo se hace una vez)

composer global require "laravel/lumen-installer"


Ahora vamos a crear el proyecto bajo el nombre ejemplo (esto puede tardar)

lumen new ejemplo




Comprobaremos el proyecto creado, ingresando a la carpeta y ejecutando el servidor integrado de de php.

cd ejemplo


<?php
php -S localhost:8000 -t public



Luego navegamos a la url generada.




La documentación hasta este punto la pueden encontrar en esta url.

https://lumen.laravel.com/docs/5.7


Configuraciones de base de datos


Configurar acceso a bases de datos.

El archivo donde lumen administra sus configuraciones por medio del archivo .env el cual se copia del archivo .env.example

renombrado archivo

Linux

  • cd ejemplo
  • mv .env.example .env
Windows (power shell)
  • cd ejemplo
  • Rename-Item -Path env.example -NewName .env
Abrimos el archivo .env y ingresamos las credenciales de la base de datos.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ejemplo
DB_USERNAME=homestead
DB_PASSWORD=secret

En la capacitación nos conectaremos con usuario root luego lo cambiaremos en ambientes de producción.



No olvide crear la base datos:

create database ejemplo;


Migraciones
Vamos a crear la tabla categorias por medio de migraciones.

php artisan make:migration create_categories_table

Created Migration: 2018_11_20_041401_create_categories_table

Las migraciones se ingresan dentro de la carpeta Database/migration aquí encontrará  el archivo creado.




Ahora vamos a crear los campos de la tabla categorías.
 
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('CategoryID');
            $table->string('CategoryName');
            $table->mediumText('Description');
            $table->binary('Picture')->nullable();
            $table->timestamps();
        });
    }

Ya que tenemos lista la migración lo enviaremos a la base de datos.

php artisan migrate

Migration table created successfully.
Migrating: 2018_11_20_041401_create_categories_table
Migrated:  2018_11_20_041401_create_categories_table





Nota.
Si te equivocaste o puede des hacer la creación de la tabla con:
php artisan migrate:rollback

Documentación hasta este punto:
https://laravel.com/docs/5.7/migrations

Modelo

Cada tabla de base de datos tiene un "Modelo" correspondiente que se utiliza para interactuar con esa tabla. Los modelos le permiten consultar datos en sus tablas, así como insertar nuevos registros en la tabla.

Lumen no carga inicialmente Eloquent.

Para poder usarlos, debemos des comentar las siguientes líneas de código ubicadas en
bootstrap/app.php
$app->withFacades();
$app->withEloquent();


Cree un archivo con el nombre Categories.php bajo la carpeta App



use Illuminate\Database\Eloquent\Model;

class Categories extends Model
{

 protected $table = 'Categories';
 protected $primaryKey = 'CategoryID';
 protected $fillable = ['CategoryID','CategoryName','Description'];
 protected $hidden = ['created_at','updated_at','Picture'];

}

Documentación:
Filltable = Propiedades disponibles
hidden= Propiedades que vamos a ocultar
https://laravel.com/docs/5.7/eloquent

Controladores

En lugar de definir toda la lógica de manejo de su solicitud como cierres en archivos de ruta, es posible que desee organizar este comportamiento usando clases de controlador. Los controladores pueden agrupar la lógica de manejo de solicitudes relacionadas en una sola clase. Los controladores se almacenan en el directorio.app/Http/Controllers

Crear un archivo llamado CategoriesController.php en la carpeta "app/Http/Controllers"
<?php namespace App\Http\Controllers;

use App\Categories;
use Illuminate\Http\Request;

class CategoriesController extends Controller
{
    public function index()
    {
        $categories = Categories::all();
        return response()->json($categories, 200);
    }


    public function getCategories($id)
    {
        $categoria = Categories::find($id);
        if($categoria)
        {
            return response()->json($categoria, 200);
        }

        return response()->json(["Categoria no encontrado"], 404);

    }

    public function createCategories(Request $request)
    {
        $categoria = new Categories;  
        $categoria->CategoryName = $request->CategoryName;
        $categoria->Description = $request->Description;
        $categoria->save();
        return response()->json($categoria);  
    }

    public function updateCategories(Request $request,$id)
     { 

        $categoria= Categories::find($id);
            
        $categoria->CategoryName = $request->CategoryName;
        $categoria->Description = $request->Description;
        $categoria->save();
        return response()->json($categoria);
     }

     public function destroyCategories($id)
     {
        $categoria = Categories::find($id);
        $categoria->delete();
         return response()->json('La categoria fue eliminada');
     }
}




Documentación:
https://laravel.com/docs/5.7/controllers

Router

Todas las rutas de Laravel se definen en sus archivos de ruta, que se encuentran en el  routesdirectorio. Estos archivos se cargan automáticamente por el marco. El archivo define rutas que son para su interfaz web.

Abra el archivo web.php en la carpeta routes
$router->get('/categories', 'CategoriesController@index');
$router->get('/categories/{id}', 'CategoriesController@getCategories');
$router->post('/categories', 'CategoriesController@createCategories');
$router->put('/categories/{id}', 'CategoriesController@updateCategories');
$router->delete('/categories/{id}', 'CategoriesController@destroyCategories');


Documentación
https://laravel.com/docs/5.7/routing

Probando

Es hora de probar nuestra api, lo ideal es usar una instalar una aplicación llamada POSTMAN.

https://www.getpostman.com/download?platform=win64


Ingresando Categorías



Listando las Categorías



Actualizar Categorías


Eliminar Categorías


Ver