JSON:APIバックエンド
JsonDrop APIは、バックエンド/フロントエンド間のやり取りにJSON:API実装を使用しており、以下への完全準拠の実装です。
すぐに使えるエンドポイントが含まれたPostmanコレクション:
https://drive.google.com/file/d/1rMf0XdrK1zXwPqLQVsTH44Z2ttFxj7ss/view?usp=drive_link
JSON:API仕様は、それ自体の言葉で言えば次のとおりです。
クライアントがリソースの取得や変更をどのように要求すべきか、またサーバーがそれらの要求に対してどのように応答すべきかを定めた仕様。
JSON:APIは、クライアントとサーバー間で送受信されるリクエスト数とデータ量の両方を最小限に抑えるように設計されています。この効率性は、読みやすさ、柔軟性、発見可能性を損なうことなく実現されます。
Drupalのデータ構造、すなわちエンティティタイプ、バンドル、フィールドは、JSON:APIに非常に適しています。
JSON:APIモジュールを有効にすると、Drupalアプリケーションのすべてのタイプに対して完全なREST APIをすぐに利用できます。JSON:APIはエンティティタイプとバンドルを検査し、標準的なHTTPメソッドであるGET、POST、PATCH、DELETEを使用して、それぞれにアクセスするためのURLを動的に提供します。
JSON:APIは、モジュールが「すぐに使える」状態で本番対応でなければならないという理念を採用しています。つまり、このモジュールは、リソースがどこに配置されるか、どのメソッドがすぐに利用できるかについて強い意見を持っており、アクセス制御はDrupal Coreの権限システムに任されています。現時点では、利用可能な構成ページはありません。つまり、最小限の労力でAPI駆動のDrupalアプリケーションを始動できます。
このドキュメントページの子ページには以下のものが含まれます。
- JSON:API仕様のコアコンセプト - および、それらがDrupalにどのように適用されるか
- モジュールが提供するAPIの広範な概要。
- HTTPリクエストを作成する方法に関する実践的な情報。
- リクエストを認証する方法。
- よくある「落とし穴」。
- 以下に関する具体的なドキュメント:
- 個別リソースの取得(GET)
- リソースコレクションの取得(フィルター、ページング、ソート付きGET)
- 新しいリソースの作成(POST)
- 既存リソースの更新(PATCH)
- 既存リソースの削除(DELETE)
具体的な質問がある場合は、JSON:APIモジュールの課題キュー(issue queue)[480件の課題]にサポートリクエストを作成してください。
JSON:APIモジュールが提供するAPIは、Drupalのエンティティタイプとバンドルを中心に構成されています。すべてのバンドルには固有のURLパスが与えられ、これらはすべて共通のパターンに従います。
Drupal CoreのRESTモジュールとは異なり、これらのパスは構成可能ではなく、すべてデフォルトで有効です。コアのRESTとは異なり、JSON:APIはJSONやHAL+JSONのような単なるフォーマットではありません。これは、APIがどのように動作するかについてのはるかに広範なルール群を含んでいます。どのHTTPメソッドを使用すべきか、特定の状況でどのHTTP応答コードを返すべきか、応答本文の形式、リソース間の関連付けを規定します。より詳細な比較については、JSON:API とコアのRESTモジュールを参照してください。
タイプ
JSON:APIのすべてのリソースには、グローバルに一意なtypeプロパティが必要です。DrupalのJSON:API実装は、このtypeプロパティをエンティティタイプのマシン名とバンドルのマシン名から導き出します。たとえば、記事(article)、ページ(page)、ユーザー(user)には、それぞれnode--article、node--pages、user--userというタイプが与えられます。Drupalのユーザーエンティティタイプにはバンドルがないことに注意してください。エンティティタイプにバンドルがない場合、一貫性のためにエンティティタイプがそのまま繰り返されます。
URL構造
JSON:APIのURLは次のようになります:
GET|POST /jsonapi/node/article
PATCH|DELETE /jsonapi/node/article/{uuid}
すべてのリソースタイプはAPI内で一意にアドレス指定可能でなければなりません。つまり、APIで利用可能なすべてのタイプは一意のURLを持たなければなりません。各タイプをアドレス指定できるという要件に加えて、これは常に、特定のURLで取得できるのは1つのリソースタイプのみであることを意味します。Drupal実装は次のパターンに従います:/jsonapi/{entity_type_id}/{bundle_id}[/{entity_uuid}]。
URLは常に/jsonapiがプレフィックスとして付きます。
その後、エンティティタイプIDとバンドルIDがスラッシュで連結されます。/jsonapi/nodeにはURLが存在しないことに注意してください。これは、複数のバンドルタイプが存在するため、このURLが複数のリソースタイプを単一のURLから提供することになり、仕様に違反するためです。
存在する:
/jsonapi/node/page
/jsonapi/node/article
存在しない:
/jsonapi/node
エンティティタイプとバンドルIDの後に、オプションのID部分があります。単一のリソースをアドレス指定して取得、更新、または削除するには、このパス部分を含める必要があります。これは常にリソースのUUIDです。新しいリソースを作成する場合(IDの有無を問わず)、または単一タイプのリソースコレクションを取得する場合は、IDパス部分を省略します。
GET, POST
/jsonapi/node/article
PATCH, DELETE
/jsonapi/node/article/{uuid}
HTTPメソッド
JSON:APIは受け入れるHTTPメソッドを規定しています。それらは、GET、POST、PATCH、DELETEです。特に、PUTは含まれません。
- GET - データを取得します。リソースのコレクションまたは個別のリソースにできます
- POST - 新しいリソースを作成します
- PATCH - 既存のリソースを更新します
- DELETE - 既存のリソースを削除します
リクエストヘッダー
必要に応じて「Content type」と「Accept」ヘッダーを必ず使用してください。詳細についてはクライアントの責任を参照してください。
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
応答コード
JSON:API仕様は許容される応答も規定しています。Drupal実装はその一部を使用します。モジュールは次のコードで応答できます:
- 200 OK - 成功したすべてのGETおよびPATCHリクエスト
- 201 Created - 成功したすべてのPOSTリクエスト(応答には新しく作成されたリソースが含まれます)
- 204 No Content - 成功したすべてのDELETEリクエスト
Drupal Documentationより引用。