Azure Table Storage en Laravel
En el post de hoy vamos a ver uno de los servicios de almacenamiento de datos NoSQL que nos ofrece Azure, más concretamente escribiré sobre cómo podéis usar Azure Table Storage desde PHP.
Antes de nada os quiero recordar que si estáis buscando más información sobre este tema pero enfocado a .NET y C# podéis ver este post escrito por Hugo Sanchez Garcia.
Primeros pasos
Lo primero de todo es instalar el SDK de Azure via Composer o descargándolo desde su página oficial en GitHub.
"require": {
"microsoft/windowsazure": "v0.5.0",
},
Lo siguiente que haremos será guardar la cadena de conexión que necesitaremos para conectarnos con el servicio en una variable de entorno, en nuestro caso será en el archivo .env local para probar.
Para ello abriremos el archivo .env y añadiremos una nueva línea con el siguiente contenido:
AZURE_TABLE_CONNECTION=DefaultEndpointsProtocol=[http|https];AccountName=[yourAccount];AccountKey=[yourKey]
Con esto lo que conseguiremos es no tener que escribir la cadena de conexión en el propio código, evitando que una vez subamos la web al servidor haya que estar buscando y reemplazando la cadena por el proyecto, sin obviar la seguridad que aporta no tener la cadena por el código.
Ahora la añadiremos en el config\services.php, con esto haremos que sea accesible a través del método config(‘key’) desde cualquier parte de nuestra aplicación:
'azuretable' => [
'connectionstring' => env('AZURE_TABLE_CONNECTION')
]
Entrando en faena
Ahora vamos a crear una Facade custom para no tener que crear todo el rato la conexión a mano.
Pues bien crearemos el directorio app\Facades y dentro una clase llamada AzureTableFacade con el siguiente código:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class AzureTableFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'azuretable';
}
}
Lo siguiente es registrarlo en el array de aliases del config\app.php añadiendo la siguiente línea:
'AzureTable' => \App\Facades\AzureTableFacade::class,
Una vez hemos hemos creado la Facade necesitamos crear un Service Provider, para lo que podéis utilizar Artisan:
php artisan make:provider AzureTableProvider
Añadiendo el siguiente código en el método register() de la clase generada automáticamente:
public function register()
{
App::bind('azuretable', function(){
return ServicesBuilder::getInstance()->createTableService(config('services.azuretable.connectionstring'));
});
}
Por último tendremos que registrar también el Provider en el array de ‘providers’ que encontraremos una vez más en el config\app.php:
App\Providers\AzureTableProvider::class,
Y con esto tenemos todo lo necesario para poder realizar las llamadas a nuestro Azure Table sin tener que repetir el mismo código para realizar la conexión una y otra vez, tan solo tendremos que escribir “\AzureTable::metodo()”, por ejemplo:
\AzureTable::queryEntities("nombreTabla"); // En este caso obtenemos todas las entidades de la tabla 'nombreTabla'
Probando nuestro código
Ahora ya solo nos queda probar a realizar alguna petición a nuestro Azure Table para ver que todo funciona correctamente, para ello podemos escribir el siguiente código:
public function showTable()
{
try {
$result = \AzureTable::queryEntities('nombreTabla');
$entities = $result->getEntities();
foreach($entities as $entity) {
echo $entity->getPartitionKey().":".$entity->getRowKey();
}
} catch(ServiceException $e) { }
}
Con lo que obtendremos una lista de todas las entidades de la tabla “nombreTabla”.
Saludos y gracias por leernos! (Y si te gustan estos posts técnicos, suscríbete y los miércoles y viernes tendrás siempre uno nuevo)