Редакции
Модуль JSON:API предоставляет доступ к ревизиям сущностей как к версиям ресурсов, по аналогии с RFC5829: Link Relation Types for Simple Version Navigation between Web Resources.
Текущие ограничения:
- Версии ресурсов (ревизии сущностей) доступны только для чтения и только для сущностей типов
Node
иMedia
(ресурсыnode--*
иmedia--*
). Это связано с отсутствием API контроля доступа к ревизиям в ядре Drupal. Когда он появится, будут доступны и другие ревизируемые типы сущностей (см. #3031271). - Тем не менее, новые версии создаются автоматически при
PATCH
запросах к типам сущностей, настроенным на автоматическое создание ревизий. В будущем появится возможность явно указать вPATCH
-запросе, следует ли создавать новую ревизию (см. #2993557).
Поддержка ревизий — не часть официальной спецификации JSON:API. Однако разрабатываются профили (неофициальные, но уже включённые в JSON:API v1.1), чтобы стандартизировать дополнительные возможности модуля JSON:API, сохраняя при этом соответствие спецификации.
Цель — обеспечить максимальную совместимость JSON:API модуля с другими системами и минимизировать специфические для Drupal особенности ("друпализм").
Версией в контексте JSON:API считается любая ревизия, которая была или является текущей (по умолчанию). Ревизии, не являющиеся текущими, рассматриваются как "рабочие копии", так как они обычно не доступны публично и предназначены для текущей работы.
При установленном модуле Content Moderation последняя по времени ревизия может не быть текущей (по умолчанию).
Как запросить версию ресурса?
Для запроса конкретной версии используется параметр запроса в URL:
идентификатор-версии
__|__
/ \
?resourceVersion=foo:bar
\_/ \_/
| |
тип-переговорщика аргумент версии
Переговорщик определяет способ получения нужной ревизии. Поддерживаются:
id
— принимает ID ревизии как аргументrel
— принимаетlatest-version
илиworking-copy
как аргумент
В будущем могут появиться переговорщики, основанные на временных метках или рабочих пространствах.
Примеры
Допустим, у узла есть ревизия "Опубликовано" и последующая ревизия "Черновик".
- Получить опубликованную ревизию:
/jsonapi/node/page/{{uuid}}?resourceVersion=rel:latest-version
/jsonapi/node/page/{{uuid}}?resourceVersion=rel:working-copy
/jsonapi/node/page/{{uuid}}?resourceVersion=id:{{revision_id}}
На данный момент невозможно запросить коллекцию всех ревизий. Это в разработке (см. #3009588).
Статья с сайта Drupal Documentation.