Serialización de Modelos en Rails con ActiveModelSerializer
Clase 15 de 33 • Curso de Creación de APIs con Ruby on Rails
Resumen
¿Cómo controlar la serialización de modelos en Rails?
En el desarrollo de aplicaciones, a veces se necesita más control sobre cómo se presenta la información a través de las APIs. Rails maneja la serialización de modelos a JSON internamente, pero ¿qué pasa si quieres más personalización? Aquí entra en juego ActiveModelSerializer, una gema que nos permite definir exactamente qué y cómo mostrar los atributos de nuestros modelos al cliente. Aprenderemos a instalar, configurar y usar esta gema con un ejemplo práctico sobre el modelo Post
.
¿Cómo instalar ActiveModelSerializer?
Para comenzar a utilizar ActiveModelSerializer, es indispensable tenerla instalada. Esta es una gema adicional que se incorpora a tu proyecto:
-
Ve a tu archivo
Gemfile
y especifica la gema:gem 'active_model_serializers', '~> 0.10.8'
-
Luego, desde la terminal, ejecuta el comando para instalar las gemas:
bundle install
¿Cómo generar un serializador para un modelo específico?
Una vez que ActiveModelSerializer está instalado, podemos usar su generador para facilitar la creación de serializadores. Sigamos estos pasos para el modelo Post
:
-
Utiliza el generador de Rails para crear un serializador:
rails generate serializer Post
Esto generará una clase
PostSerializer
que hereda deActiveModel::Serializer
. -
Abre el archivo generado y observa su estructura inicial. Ahí es donde definirás los atributos que deseas incluir en la representación JSON.
¿Cómo personalizar la salida JSON?
El principal beneficio de ActiveModelSerializer es la personalización:
-
Dentro de
PostSerializer
, incluye los atributos que te interesen. Por defecto, solo elID
está incluido:class PostSerializer < ActiveModel::Serializer attributes :id, :title, :content, :published end
-
Para incluir atributos relacionados, como el
autor
que no pertenece directamente al modeloPost
, define un método en el serializador. Utilizaself.object
para hacer referencia al objeto serializado.class PostSerializer < ActiveModel::Serializer attributes :id, :title, :content, :published def author user = self.object.user { name: user.name, email: user.email, id: user.id } end end
¿Cómo probar que la serialización funciona correctamente?
Después de modificar el serializador, es crucial verificar que todo funcione como esperas.
-
Modifica las pruebas existentes o escribe nuevas para reflejar el formato JSON esperado. Asegúrate de incluir todos los atributos configurados, como
title
,content
,published
yauthor
. -
Ejecuta tus pruebas. Inicialmente, probablemente fallen porque el nuevo formato JSON no está preparado para el test:
bundle exec rspec
-
Asegúrate de que las pruebas pasen exitosamente luego de ajustar el serializador.
ActiveModelSerializer es una herramienta poderosa para la personalización de APIs en Rails. Arma a los desarrolladores con el control necesario para manipular la representación JSON de los modelos, posibilitando una arquitectura API más coherente y ajustada a las necesidades del cliente.
Continúa explorando esta gema y demás que ofrece el ecosistema de Rails para seguir enriqueciendo tus proyectos. ¡El aprendizaje nunca termina!