Crear API Rest Laravel + Postgres
Para quienes me conocen, saben que no soy amante de los framework en PHP sin embargo este ha captado bastante mi atención, tomemos unos minutos para crear un API sencillo tomando los datos desde Postgres.
Comencemos por crear el proyecto Laravel.
~$ git clone https://github.com/laravel/laravel.git
Renombramos la carpeta del proyecto clonado y nos ubicamos dentro de ella.
~$ mv laravel ApiPostgre ~$ cd ApiPostgre
En esta ocasión llamaremos al ejemplo ApiPostgre, uds son libres de colocarle el nombre que quieran a la carpeta.
Actualizaremos la carpeta vendor, que nos contiene todo el core del Framework.
~$ sudo composer update
Luego de haber hecho esto, modificaremos nuestro archivo .env que se encuentra dentro de la carpeta del proyecto, este es un archivo de configuración donde puedes definir variables globales que podrán ser utilizadas dentro del proyecto.
Generaremos la llave de la aplicación con el siguiente comando.
~$ php artisan key:generate
Esta llave generada, la colocaremos dentro del archivo .env de la siguiente manera.
APP_ENV=local APP_KEY=base64:rQmQ+atSNYz2L4TvjixwJZh/i9kFSrhiH/+GyyNmEcY= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost
Configuraremos dentro del mismo archivo .env la conexión a nuestra base de datos Postgre.
PG_HOST = localhost PG_DATABASE = nombreBD PG_USERNAME = usuarioBD PG_PASSWORD = claveBD PG_PORT = 5432
Le indicaremos al archivo database.php dentro de la carpeta config, cual será la conexión que utilizaremos.
'default' => 'elefante', 'connections' => [ 'elefante' => [ 'driver' => 'pgsql', 'host' => env('PG_HOST', 'localhost'), 'database' => env('PG_DATABASE', 'forge'), 'username' => env('PG_USERNAME', 'forge'), 'password' => env('PG_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ], ]
Asignaremos el pseudonimo para los namespace de nuestras clases, dentro del arreglo global llamado «psr-4» esto lo haremos en el archivo composer.json de nuestro proyecto.
"autoload": { "classmap": [ "database" ], "psr-4": { "apipg\\": "app/" } },
Crearemos dentro de app la carpeta donde contendremos nuestros archivos modelos.
~$ mkdir -p Models/TablesDB/
Creamos el modelo para obtener todos los usuarios registrados en BD.
<?php namespace apipg\Models\TablesDB; use Illuminate\Database\Eloquent\Model; use DB; class Usuarios extends Model { /** * Table from DB. */ protected $connection = 'elefante'; protected $table = 'usuarios'; public function scopeGetUsers($query) { return Usuarios::all(); } }
Ahora crearemos el controlador que se encargará de retornar los usuarios consultados, este controlador lo ubicaremos dentro de la ruta : app/Http/Controllers/Users
<?php namespace apipg\Http\Controllers\Users; use apipg\Models\TablesDB\Usuarios; use apipg\Http\Controllers\Controller; use Request; use apipg\Http\Requests; class UsuariosController extends Controller { public function __construct() {} public function getUsers() { return Usuarios::GetUsers(); } }
Crearemos la ruta para poder obtener el JSON de estos valores via GET, para esto debemos modificar el archivo routes.php dentro de app/Http/
Route::resource('api/backend/users','Users\UsuariosController'); Route::get('api/backend/users/getusers','Users\UsuariosController@getUsers');
Listo, ya podemos acceder desde el explorador, o desde Postman a la ruta para obtener los valores del API que acabamos de crear. Ejemplo:
laravel.postgres.dev/api/backend/users/getusers
Espero les haya sido de gran utilidad.