JSON:API con Drupal 8 y Drupal 9

JSON:API es la nueva alternativa a GraphQL por la que ha apostado Drupal. Más sencilla y fácil de usar. ¿Habrán acertado?

A partir de Drupal 8.7 JSON:API viene con el core de Drupal. Hasta entonces era un módulo contrib, desarrollado casi íntegramente por Mateu Aguiló pero Dries (el creador de Drupal y dictador benévolo) viendo el potencial y comparándola con las otras alternativas decidió integrarlo en el core y destinarle más recursos.

¿Qué es JSON:API?

JSON:API es un formato que funciona sobre http. Este define cómo el cliente (el navegador normalmente) debe pedir o editar los datos del servidor, y cómo el servidor debe responder a dichas solicitudes.

El objetivo principal es optimizar las solicitudes HTTP; en cantidad y en tamaño.

JSON:API se crea como alternativa a REST API que presenta una serie de problemas:

  • Hay que definir un endpoint por cada recurso.
  • No es posible modificar desde el cliente los campos que devuelve. Esto implica que si se necesitan más campos se tiene que pedir al desarrollador del Rest API que ponga el nuevo campo o que si no vas a usar todos los campos se malgasta ancho de banda y el tiempo que implica mover bits de más.
  • Si una página necesita información de más de un recurso es necesario hacer múltiples llamadas o hacer endpoints ad hoc.

Ante esto surgió principalmente dos alternativas: GraphQL y JSON:API. Estas dos especificaciones superan las dificultades que he descrito anteriormente, puedes ver en detalle cómo en el post de Dries.

Para mi, después de haber probado los dos tecnologías, la diferencia es que JSON:API es más sencillo y eso siempre es bueno. Y para ser algo nuevo la documentación que hay disponible en Drupal.org no está nada mal, aunque como siempre le faltan algunos ejemplos.

¿Cómo es el formato del JSON:API?

Este sería un ejemplo de un recurso tipo article:

¿Cómo lo hago para activar en Drupal el JSON:API?

Recuerda que para que venga en el core es necesario tener Drupal 8 a partir de la 8.7. Si lo quieres tener pero no puedes actualizar a esa versión lo puedes instalar como módulo contrib. Solo queda activarlo y no hay que configurar nada más.

Luego vamos a la url /jsonapi de nuestro dominio. En nuestro caso usaremos de ejemplo drupaldemo.omitsis.com, dónde tenemos un Drupal actualizado a la última versión con el perfil de instalación umami.

Por lo tanto, si vas a drupaldemo.omitsis.com/jsonapi verás todos los recursos disponibles y lo mejor es que son navegables haciendo click. Aquí alguien familiarizado con GraphQL puede echar de menos a GraphiQL, que es más potente, pero el sistema de jsonapi es más sencillo y simple.

Por ejemplo, si tenemos un tipo de contenido receta, hacemos click en receta y nos llevará a https://drupaldemo.omitsis.com/jsonapi/node/recipe y ya estaremos el end point de ese tipo de contenido.

¿Se puede filtrar, quitar campos, añadir campos y añadir relaciones con JSON:API?

Respecta rápida: Sí, se puede.

Respuesta larga: Da para un post entero, para la segunda parte de esta introducción. De mientras puedes ver todo esto en la documentación.

Y si quieres implementar JSON:API en tu próximo proyecto de empresa, contacta con nosotros, estaremos encantados de ayudarte.

 

by Carlos Rincón
Programador Drupal Senior con experiencia en SEO, SEM, analíticas web, aplicaciones móbil y usabilidad.