Scroll
JSON:API vs. REST модули ядра
Кратко (TL;DR)
Используйте REST, если вам нужно работать с данными вне сущностей. Во всех остальных случаях — выбирайте JSON:API.
Более подробно:
- Модуль REST из ядра позволяет делать что угодно (любой формат, логика, HTTP-методы) и очень гибок. Мощный, но сложный и более хрупкий.
- JSON:API фокусируется на главной силе Drupal — сущностях и моделировании данных. Прост и в то же время достаточно мощный для большинства задач.
Сравнительная таблица возможностей
Возможность | JSON:API | REST | Примечание |
---|---|---|---|
Сущности как ресурсы | ✔️ | ✔️ | REST: нужно настраивать отдельно для каждого типа сущности. JSON:API: всё доступно по умолчанию. |
Пользовательские данные как ресурсы | — | ✔️ | REST: возможно через @RestResource. JSON:API работает только с сущностями. |
Получение отдельного ресурса | ✔️ | ✔️ | |
Получение списка ресурсов | ✔️ | частично | REST: нужно использовать Views с REST export. |
Пагинация | ✔️ | только с доп. модулем | REST по умолчанию возвращает весь список. |
Фильтрация списка | ✔️ | частично | REST: нужно создавать фильтры вручную в Views для каждого поля и оператора. |
Сортировка ресурсов | ✔️ | — | |
Вложенные связи (includes) | ✔️ | Только в HAL+JSON | |
Без избыточной обёртки полей | ✔️ | — | JSON:API нормализует поля проще и понятнее, чем стандартный REST с HAL. |
Пропуск ненужных полей | ✔️ | — | |
Последовательность URL | ✔️ | — | |
Обнаружение доступных типов ресурсов | ✔️ | — | |
Формат ответа без привязки к Drupal | ✔️ | — | REST: теоретически HAL нейтрален, но на практике содержит "друпализмы". |
Библиотеки клиентов | ✔️ | — | Для JSON:API есть готовые клиенты на разных языках. |
Расширяемая спецификация | WIP | — | |
Работает без настройки | ✔️ | — | REST: каждую сущность нужно конфигурировать, выбирать методы, форматы и т.д. JSON:API: всё включено по умолчанию с учётом прав доступа. |
Дополнительная информация
См. обоснование добавления JSON:API в ядро Drupal и описание архитектуры модуля.
Статья с сайта Drupal Documentation.