Como ya sabíamos, drupal es un gran CMS que nos permite crear una gran variedad de aplicaciones de todo tipo. Una de ellas son, sin duda, las famosas APIs.

Una Interfaz de Programación de Aplicaciones, API en inglés, no es mas que una aplicación con un conjunto de definiciones y/o protocolos los cuales se utilizan a modo de capa de abstracción para que ésta sea empleada por otra aplicación.

Para entender cómo funcionan las APIs hemos de entender varios términos:

  • Endpoint: Ruta de la cual vamos a utilizar para realizar una petición y obtener un servicio.
  • Peticiones: Son la ejecución de una llamada a un endpoint, estas llamadas pueden ser de diferentes tipos dependiendo la acción que necesitemos realizar, GET, POST, PUT, DELETE y PATCH son los típicos y mas usados. mas info aquí.
  • Respuesta: Es el resultado que obtenemos al realizar una petición, en esta respuesta obtendremos desde la información que estábamos buscando hasta los códigos e información de error en caso de haberlos. 
  • Autentificación: Como norma general las APIs pueden ser abiertas o cerradas, en caso de ser cerradas significa que estarán protegidas por algún tipo de credenciales, Basic, Bearer, OAuth y API Key/CLIENT ID son los protocolos mas usados, cada uno de ellos brinda diferentes medidas de seguridad y complejidad.
  • Autorización: Define el nivel de acceso a la información de un usuario.
  • Tipos de arquitectura: Existen diferentes formas de organizar y/o presentar la información con una API. Las mas utilizadas son RESTful, SOAP y JSON:API.mas info aquí.

Entendidos los puntos anteriores, ya podemos empezar a debatir que tipo de arquitectura será la mejor para nuestra API en drupal.

JSON:API vs. core's REST

Antes de entrar en materia, vamos a dejar claro que ambas arquitecturas aparecen en drupal en modo de dos módulos diferentes:

Al activar estos módulos drupal ya nos va a preparar toda una funcionalidad capaz de manejar todas las peticiones y respuestas.

Si os estáis preguntando si es posible activar los dos, ya os digo que sí es posible, es más, es incluso posible crear diferentes arquitecturas en una misma API, aunque si hacéis esto documentarlo todo perfectamente, si no, será un dolor de cabeza en el futuro.

Antes de continuar os recomendaría revisar este artículo de la documentación oficial de drupal, el cual nos muestra un cuadro bastante descriptivo de las funcionalidades de ambos módulos.

Si habéis visto el cuadro, os habréis percatado, seguramente, que JSON tiene muchas mas funcionalidades y parece mucho mejor que RESTful, y eso cierto, pero sólo en parte.

JSON por la forma como gestiona la información nos provee una cantidad de funcionalidades extras que REST no es capaz por sí solo, como por ejemplo un paginador, filtrar campos…

Lo mejor y lo peor de cada uno:

RESTFul

  • Permite la creación de custom endpoints además de proveer unos por defecto para la gestión de entidades de drupal.
  • Nos permite devolver una respuesta en diferentes formatos.
  • No podemos realizar ningún tipo de filtro ni paginación de forma inicial, para esto tendriamos que crear un endpoint custom y programarlo manualmente.
  • Schema simple de respuesta del objeto.
  • Rendimiento y almacenamiento de caché aceptable pero muy mejorable.
  • Dependiendo de la complejidad de tu proyecto requerirá de mas de una petición para obtener toda la información necesaria.
  • Permite integrar diferentes sistemas de autenticaciones, como Oauth2, barer…

JSON:API

  • Solamente se puede usar para obtener datos de las entidades de drupal.
  • Únicamente nos permite devolver una respuesta json.
  • Permite el filtrado de campos, paginación…
  • Schema mas completo del objeto en la respuesta en comparación con RESTful.
  • Rendimiento y almacenamiento de cache muy efectivo.
  • Como norma general con una simple llamada obtienes todos los datos que necesitas.
  • No soy capaz de verificar si es posible usar algún otro tipo de sistema de autenticaciones aparte del que provee drupal.

Os dejo dos pequeños videos para que veais los dos ejemplos en acción.

RESTful

JSON:API

¿Cual es el mejor para mi proyecto?

Aparentemente, después de lo que hemos visto hasta ahora (vídeos incluidos) todos, tendríamos a elegir siempre JSON, pero ojo, no caigas en la trampa de la tentación de lo «fácil», porque cada uno tiene una razón de ser.

JSON:API es sin duda un gran sistema con el cual trabajar de forma nativa en drupal, pero hemos de tener en cuenta todas las limitaciones que este sistema trae.

Desde mi punto de vista, el cuándo elegir uno u otro, se limita a cuanto custom, o cuanto escalable queréis que sea vuestra API.

Si lo que estáis buscando es un sistema rápido de acceso ÚNICAMENTE a entidades de drupal, sin extremadas customizaciones, sin duda JASON:API es vuestra solución, es rápido y prácticamente plug & play.

Pero si por lo contrario, necesitáis hacer respuestas custom, es un proyecto que puede crecer y no sabéis dónde acabará, si necesitáis hacer llamadas o cualquier tipo de integración con una API externa, entonces no os compliqueis RESTFul es vuestra elección mas fiable.

Conclusión

Como hemos visto es este pequeño artículo drupal tiene un gran potencial para ser usado como API y no solamente como un simple CMS y además cuenta con grandes y «simples» soluciones.

En los próximos artículos trataremos el cómo instalarlos y trabajarlos individualmente para que podáis ver todo su potencial, sobre todo el RESTFul que trae mas funcionalidad para customizar.

Si tienes experiencia con alguno de estos dos sistemas y deseas dejar tu opinión, no dudes en comentar y ayudar a otras personas que tengan dudas.