Scroll
JSON:API vs. módulo REST del núcleo
TL;DR
Elige REST si tienes datos que no son entidades y quieres exponerlos. En todos los demás casos, elige JSON:API.
Un poco más detallado:
- El módulo REST del núcleo permite cualquier cosa (cualquier formato, cualquier lógica, cualquier método HTTP) y ofrece una configurabilidad extrema. Es potente pero complejo y, por lo tanto, relativamente frágil.
- JSON:API se centra en exponer la mayor fortaleza de Drupal (entidades/modelado de datos) de una manera coherente. Sencillo pero suficientemente potente para la mayoría de los casos de uso.
Matriz de características
Funcionalidad | JSON:API | REST | Observación |
---|---|---|---|
Entidades expuestas como recursos | ✔️ | ✔️ | REST: necesitas configurar esto por cada tipo de entidad. JSON:API: todo se expone por defecto. Ambos: respetan el acceso a entidades. |
Datos personalizados expuestos como recursos | ✔️ | Escribe plugins personalizados @RestResource. JSON:API solo admite entidades. | |
Obtener recursos individuales | ✔️ | ✔️ | |
Obtener listas de recursos | ✔️ | más o menos |
REST: necesitas configurar una vista y establecer una visualización "REST export". |
Paginación de listas de recursos | ✔️ | Se requieren módulos adicionales como Pager Serializer. | REST: ¡no soportado! Las vistas REST export devuelven todos los recursos. |
Filtrado de listas de recursos | ✔️ | más o menos |
REST: solo si creas un filtro expuesto para cada campo y cada posible operador |
Ordenación de recursos | ✔️ | ||
Inclusiones/embebidos | ✔️ | Solo en HAL+JSON | |
Sin envoltorio innecesario de valores de campo | ✔️ | Tanto la normalización HAL como la normalización por defecto (y por lo tanto todos los formatos) exponen exactamente las estructuras de datos PHP en memoria que usa Drupal, lo que resulta doloroso para los consumidores. JSON:API simplifica la normalización de campos de cardinalidad y propiedad única. | |
Capacidad de omitir campos que el consumidor no necesita | ✔️ | ||
URLs consistentes | ✔️ | ||
El consumidor puede descubrir los tipos de recursos disponibles | ✔️ | ||
Estructura de respuesta independiente de Drupal | ✔️ | REST: la normalización HAL en teoría es ajena a Drupal, pero en la práctica no lo es. | |
Librerías cliente | ✔️ | ||
Especificación extensible | WIP | ||
Cero configuración | ✔️ | REST: cada definición de plugin @RestResource puede exponerse, pero debe configurarse manualmente. Para cada uno, debes seleccionar los formatos permitidos, los proveedores de autenticación permitidos y opcionalmente los métodos HTTP permitidos. JSON:API: todas las entidades se exponen automáticamente, se respeta el acceso a entidades/campos, y todos los proveedores de autenticación instalados se permiten automáticamente. |
Más información
Consulta la justificación para añadir el módulo JSON:API al núcleo de Drupal, y la justificación de la arquitectura del módulo.
Artículo de Drupal Documentation.