Creando Uuids para los modelos con un Observer

Vamos a crear un Observer para crear Uuids automáticamente para nuestros modelos de eloquent.

Que es un UUID?

El Uuid se define como un identificador único universal (https://es.wikipedia.org/wiki/Identificador_único_universal) que nos sirve para referenciar un registro de nuestra base de datos sin usar el ID auto incremental.

Por que no usar el ID Auto incremental?

Es muy común ver REST APIs que exponen en la URL los IDs de los recursos y estos son IDs auto incrementales, esto está considerado como una mala práctica ya que eso expone información que no debería ser expuesta como un acercamiento a la cantidad de registros en una base de datos, no quiero que mi competencia vea que tengo 300 usuarios por que el último recurso de un index paginado tiene un ID de 300. Esto usualmente es visto también como una medida extra de seguridad (Aunque no todos estamos de acuerdo) ya que no es posible o es muy complicado saber la secuencia de estos Uuids pero hay grandes discusiones al respecto así que por ahora veámoslo como una forma de ocultar la cantidad de registros a mi competencia.

Pre Requisito

Recuerda que las tablas a cuyos modelos se les va a registrar el observer deben tener una columna uuid tipo string y con un index para guardar esta propiedad, acá un ejemplo de una migración que cumple con el requisito.

Instalación del paquete

Lo primero que necesitamos es un paquete que nos ayude a generar dichos Uuids y para eso recomiendo https://github.com/webpatser/laravel-uuid, para instalarlo lo primero que haremos es requerir el paquete con composer

Una vez composer termina de instalar las dependencias, vamos a agregar el alias en el archivo config/app.php

Ya con esto concluimos la instalación del paquete

Creación y registro del Observer

Ahora vamos a crear un Observer que nos permita escuchar los eventos de Eloquent para reaccionar a ellos en cualquier modelo. Normalmente esas clases las podemos crear en un directorio Observers en app

Como se pueden dar cuenta estamos escuchando el evento creating de eloquent que se dispara antes que el registro se persista en la base de datos, eso nos va a permitir que podamos setear una propiedad uuid en el modelo que utiliza la librería que instalamos para generar el UUID y que sea guardado al momento que se persista el modelo.

Por último vamos a registrar este observer en algún modelo, usualmente se puede hacer en el método boot del EventServiceProvider que se puede encontrar en app/Providers/EventServiceProvider.php

Por último, vamos a crear la respectiva prueba que nos validará que el modelo tenga seteada la propiedad uuid

Corriendo la prueba

Feliz programación!

Comparte este artículo

Entra en la discusión y deja tu comentario

  • Luckys

    Buen post, tambien se puede usar el paquete de Ramsey directamente.

  • Laravelman

    Muy claro, buen aporte.

  • JONATHAN YOUDY PARRA AGUILAR

    Me permito compartir… Muchas gracias…

  • Kelly Jesus Salazar Sanchez

    Me sirvió de mucho gracias..!

  • roger sosa

    Excelente post, muchas gracias por compartir el conocimiento!