Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
20/04/2025, by Ivan

Модуль 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
  • Запрос по ID ревизии:
  • /jsonapi/node/page/{{uuid}}?resourceVersion=id:{{revision_id}}

На данный момент невозможно запросить коллекцию всех ревизий. Это в разработке (см. #3009588).

Статья с сайта Drupal Documentation.