viernes, 13 de mayo de 2016

Ejemplo Api con Lumen

No hay comentarios.:
Lumen es un microframework basado en Laravel, el cual ha sido desarrollado para crear micro servicios web.

Ya debes de tener instalado composer para continuar.


Puedes bajar la solucion de:
https://github.com/cjorellana/northwindAPI

Crear proyecto


1.) Crear el proyecto lumen, vamos a crear el proyecto con composer.

Proyecto sería api y utilizaremos la versión 5.1


<?php
composer create-project laravel/lumen=5.1 api
?>

2.)  Comprobar y iniciar el servidor, ingrese a la carpeta api

Comprobando los comandos de lumen

php artisan

Levantando nuestro servidor con lumen,

php artisan serve

Navegue a:

http://localhost:8000/



Configurar

3.) Vamos a configurar el acceso a la db

Cambie el nombre de :

.env.example

a

.env

Abrimos el archivo .env y configuremos las credenciales de la base de datos.

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

Abra el archivo "api/bootstrap/app.php" y descomenta

Dotenv::load(__DIR__.'/../');
$app->withFacades();
$app->withEloquent();


Migradores 

Los migradores nos sirven para crear y cambiar nuestro esquema de la base de datos, si ya tienes las tablas salta estos pasos.

Ahora vamos un migrate para crear la tabla categories.

php artisan make:migration create_categories_table --create="Categories"

Mostrará un mensaje:


Created Migration: 2016_03_30_062918_create_categories_table

Las migraciones se ingresan dentro de la carpeta Database/migration aquí encontrará  el archivo llamado Created Migration: 2016_03_30_062918_create_categories_table abrimos este archivo.


<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Categories', function (Blueprint $table) {
            $table->increments('CategoryID');
            $table->string('CategoryName');
            $table->mediumText('Description');
            $table->binary('Picture');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('Categories');
    }
}

Ahora vamos a crear la la tabla categories.


php artisan migrate

Migration table created successfully.

Migrated: 2016_03_30_062918_create_categories_table


Podemos revisar si creo las tablas de manera correcta.



Modelos

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

"app/Categories.php"

<?php namespace 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'];
 
}

Filltable = Propiedades disponibles
hidden= Propiedades que vamos a ocultar

Controladores

Vamos a crear un controlador, 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 = Categories::create($request->all());  
        return response()->json($categoria,201);  
    }
}

Router

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

<?php
$app->get('/categories', 'CategoriesController@index');
$app->get('/categories/{categories}', 'CategoriesController@getCategories');
$app->post('/categories', 'CategoriesController@createCategories');
?>

Probando

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

Get 




Post


Ver