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.