リビジョン
JSON:APIモジュールは、RFC5829:Webリソース間の単純なバージョンナビゲーションのためのリンク関係タイプに着想を得た方法で、エンティティリビジョンをリソースバージョンとして公開します。
現在の制限事項:
- リソースバージョン(エンティティリビジョン)は読み取り専用です。また、JSON:APIがリソースバージョンへのアクセスを可能にできるのは、
NodeとMediaのエンティティタイプ(node--*とmedia--*のリソースタイプ)のみです(Drupalコアに正式なエンティティリビジョンアクセス制御APIがないためです。それが利用可能になったら、すべてのリビジョン対応エンティティタイプをJSON:API経由で利用できるようにします。#3031271:あらゆるエンティティタイプのバージョンネゴシエーションをサポート(現在はNodeとMediaのみサポート)を参照してください)。 - ただし、新しいバージョン(リビジョン)を自動的に作成するように設定されているリソースタイプ(エンティティタイプ+バンドル)のリソースを
PATCHすると、リソースバージョンが自動的に作成されます。現在、バージョン対応リソースへのPATCHリクエストで、新しいリビジョンを作成するかどうかを指定できるようにする取り組みを進めています。#2993557:JSON:API経由のオートセーブ機能をサポートするため、リビジョン対応エンティティのPATCH時に新しいリビジョンのオプション作成を許可する。を参照してください。
リビジョンサポートは、JSON:API仕様の公式な一部ではありません。ただし、JSON:APIモジュールが開発してきたカスタム動作を標準化するために、数多くの「プロファイル」が開発されており(これらも仕様の公式な一部ではありませんが、すでにJSON:API v1.1にコミットされています)、それらはすべて仕様に準拠しています。
そうすることで、JSON:APIモジュールは他のシステムと最大限互換性があるべきであり、JSON:API実装に対して開発する開発者が知っておく必要のある「Drupal特有の要素」を最小限に抑えるべきです。
JSON:APIモジュールにおける「バージョン」とは、以前デフォルトリビジョンであったか、現在デフォルトリビジョンであるリビジョンのことを指します。すべてのリビジョンが「バージョン」と見なされるわけではありません。「デフォルト」リビジョンとしてマークされていないリビジョンは「作業コピー」と見なされます。通常、一般に公開されず、ほとんどの新しい作業が適用されるリビジョンだからです。
Content Moderationモジュールがインストールされている場合、最新のデフォルトリビジョンが*最新の*リビジョンではない可能性があります。
リソースバージョンのリクエストは、URLクエリパラメーターを介して行います。次の形式になります:
version-identifier
__|__
/ \
?resourceVersion=foo:bar
\_/ \_/
| |
version-negotiator |
version-argument
バージョン識別子は、特定のリビジョンを読み込むのに十分な情報を含む文字列です。バージョンネゴシエーターコンポーネントは、リビジョンを読み込むためのネゴシエーションメカニズムを指定します。現在はidまたはrelのいずれかです。idネゴシエーターは、目的のリビジョンIDであるバージョン引数を取ります。relネゴシエーターは、latest-versionまたはworking-copyのいずれかの文字列であるバージョン引数を取ります。
将来的には、他のネゴシエーターが開発される可能性があります。たとえば、タイムスタンプベースやワークスペースベースのネゴシエーターなどです。
特定のエンティティリビジョンがどのようにリクエストされるかを説明するために、「公開(Published)」リビジョンと、その後の「下書き(Draft)」リビジョンを持つノードを想像してください。
JSON:APIを使用すると、/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:バージョン履歴を取得できるコレクションリソースを提供する(`version-history`、`predecessor-version`、`successor-version`リンク関係)で開発中です。
Drupalドキュメントからの記事です。