インストール
composer require 'drupal/restui:8.x-1.22'
composer require 'drupal/restui:8.x-1.21'
概要
REST UIは、Drupal CoreのRESTモジュールが提供するRESTリソースをサイト管理者が管理できる管理インターフェースモジュールです。このモジュールがない場合、RESTリソースはYAML設定ファイルやDrushコマンドで設定する必要があります。
このモジュールは、管理者がすべての利用可能なRESTリソースを表示し、有効化・無効化し、サポートするHTTPメソッド、受け入れるリクエストフォーマット(JSON、XMLなど)、認証プロバイダー(cookie、basic_auth、OAuthなど)を含む設定を行える一元的な管理ページを提供します。
REST UIは2つの設定粒度をサポートしています:リソースレベル(すべてのメソッドに同じフォーマットと認証を適用)とメソッドレベル(各HTTPメソッドを個別に設定)。この柔軟性により、RESTリソースをAPIコンシューマーにどのように公開するかを細かく制御できます。
Features
- Drupalで利用可能なすべてのRESTリソースを有効/無効ステータス別に一覧表示
- ポイント&クリックインターフェースでRESTリソースを有効化・無効化
- 各リソースでサポートするHTTPメソッド(GET、POST、PUT、PATCH、DELETE)を設定
- リソースごとまたはメソッドごとに受け入れるリクエストフォーマット(JSON、XML、HAL+JSONなど)を設定
- リソースごとまたはメソッドごとに認証プロバイダー(cookie、basic_auth、OAuthなど)を設定
- 2つの設定粒度オプション:リソースレベルまたはメソッドレベルの設定
- リソースパスと利用可能なメソッドを一目で確認
- 有効なリソースの現在の設定(メソッド、フォーマット、認証)を表示
- 関連するパーミッション設定へのクイックリンク
- 有効なリソース内で無効化されているメソッドを取り消し線で視覚的に表示
Use Cases
ヘッドレスDrupalのセットアップ
フロントエンドがReact、Vue、Angular、または他のJavaScriptフレームワークで構築されるデカップルドまたはヘッドレスDrupalサイトを構築する際、REST UIはコンテンツを公開するために必要なRESTリソースを有効化・設定する簡単な方法を提供します。entity:nodeリソースをGETメソッド、JSONフォーマット、適切な認証で有効化することで、フロントエンドがコンテンツを取得できるようになります。
モバイルアプリケーションバックエンドの構築
Drupalへのコンテンツの読み書きが必要なモバイルアプリの場合、REST UIを使用して完全なCRUD操作(GET、POST、PATCH、DELETE)を持つEntityリソースを有効化します。適切な認証(開発時はbasic_auth、本番環境はOAuth)とフォーマット(ほとんどのモバイルフレームワークではJSON)を設定してください。
サードパーティ連携のための特定のAPIエンドポイントの有効化
特定のDrupalデータへのアクセスが必要な外部サービスと連携する際、REST UIを使用して必要なリソースのみを選択的に有効化します。例えば、ディレクトリサービス用にentity:userリソースをGETメソッドのみで有効化したり、タグ付けサービス用にentity:taxonomy_termを有効化したりします。
メソッドごとに異なる認証を設定
操作ごとに異なるセキュリティ設定が必要な場合は、メソッドレベルの粒度を使用します。例えば、公開コンテンツの読み取り用に匿名GETリクエストをcookie認証で許可し、コンテンツを変更するPOST/PATCH/DELETE操作にはOAuth認証を要求します。
開発中のREST APIテスト
開発中、REST UIはYAMLファイルを編集せずにリソースを有効化/無効化したり設定を変更したりする簡単な方法を提供します。開発者はUIを通じてさまざまなフォーマットと認証の組み合わせを簡単にテストし、デプロイ用の設定を確定できます。
環境間でのRESTリソース管理
REST UIは主に設定インターフェースですが、作成された設定はConfig Entity(rest.resource.*設定)として保存され、Drupalの設定管理システムを使用して環境間でエクスポート・デプロイできます。これにより、UIでの初期セットアップとconfig syncによる一貫したデプロイが可能になります。
Tips
- リソースレベルの粒度は管理が簡単でRESTfulなベストプラクティスに沿っているため、ほとんどのユースケースで推奨されます
- 認証プロバイダーを有効にする際は、対応する認証モジュールがインストールされ設定されていることを確認してください(例:HTTP Basic認証用のbasic_authモジュール)
- Config Entityリソース(Views、Content Typesなど)はGET操作のみをサポートし、インターフェースでは読み取り専用として表示されます
- RESTリソース設定を変更した後は、ルートが再構築されるようにキャッシュをクリアしてください
- パーミッションリンクを使用して、どのロールが特定のRESTリソースにアクセスできるかを素早く設定できます
- リソース設定を保存する際は、少なくとも1つのメソッド、1つのフォーマット、1つの認証プロバイダーを選択する必要があります
- 本番サイトでは、ブラウザベースのクライアントにはcookie認証を、マシン間通信にはOAuthまたはJWTを優先してください
Technical Details
Admin Pages 2
/admin/config/services/rest
すべてのRESTリソースを表示・管理するためのメイン管理ページです。有効なリソースと無効なリソースの2つのセクションを表示します。各リソースには名前、URIパス、サポートするHTTPメソッド、現在の設定が表示されます。有効なリソースには、設定されたメソッド、フォーマット、認証プロバイダーが表示されます。Config EntityのリソースはGET操作のみをサポートするため、読み取り専用としてマークされます。
/admin/config/services/rest/resource/{resource_id}/edit
特定のRESTリソースを有効化・設定するための設定フォーム。粒度(リソースまたはメソッドレベル)の選択と、HTTPメソッド、リクエストフォーマット、認証プロバイダーの設定が可能です。
権限 1
Hooks 1
hook_help
REST UIページに各管理ページの目的を説明するコンテキストヘルプテキストを提供します。
Troubleshooting 6
RESTリソースプラグインを提供するモジュールがインストールされていることを確認してください。Node、User、Commentなどのコアモジュールは、RESTモジュールが有効な場合にそれぞれ独自のEntity RESTリソースを提供します。
RESTリソース設定を変更した後は、Drupalのキャッシュをクリアしてください。RESTモジュールは再構築が必要なルート定義をキャッシュします。
認証プロバイダーモジュールがインストールされ有効になっていることを確認してください。例えば、basic_authオプションにはBasic Authモジュールが有効になっている必要があります。
シリアライズフォーマットモジュールがインストールされていることを確認してください。JSON以外の追加フォーマットには、HAL(hal_json用)やカスタムシリアライズモジュールが必要です。
ユーザーロールがRESTリソースに必要なパーミッションを持っているか確認してください。パーミッションページ(REST UIからリンクされています)にアクセスし、ロールに「[リソース]リソースへのGETアクセス」などのパーミッションがあることを確認してください。
Config Entityリソース(Views、Block Typesなど)はコアの制限により、REST APIでは読み取り専用です。これらのリソースはREST UIで「(読み取り専用)」ラベルで示されているように、GET操作のみをサポートします。
Security Notes 6
- RESTリソースを有効にする場合、特にリクエストヘッダーで認証情報を送信するbasic_auth認証では、本番環境では必ずHTTPSを使用してください
- どの認証プロバイダーを有効にするか慎重に検討してください - cookie認証は適切に設定されていない場合、CSRF攻撃にリソースをさらす可能性があります
- 「administer rest resources」パーミッションは強力であり、信頼できる管理者ロールにのみ付与する必要があります
- メソッドレベルの粒度を使用して、書き込み操作(POST、PATCH、DELETE)により厳格な認証を適用し、読み取り操作(GET)にはより寛容なアクセスを許可することを検討してください
- 有効なRESTリソースを定期的に監査し、必要なエンドポイントのみが公開されていることを確認してください
- basic_authを使用する場合は、Basic Authモジュールが適切に設定されていることを確認し、ブルートフォース攻撃を防ぐためにレート制限を検討してください