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
Gemfiley 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 PostEsto generará una clase
PostSerializerque 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 elIDestá incluido:class PostSerializer < ActiveModel::Serializer attributes :id, :title, :content, :published end -
Para incluir atributos relacionados, como el
autorque no pertenece directamente al modeloPost, define un método en el serializador. Utilizaself.objectpara 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,publishedyauthor. -
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!