JSON:API仕様のContent-Type

JSON:API(jsonapi.org)準拠リクエスト用のContent-Typeヘッダーを設定します。application/vnd.api+jsonメディアタイプとその要件を解説します。

JSON APIs

詳細な説明

JSON:APIメディアタイプ

JSON:API仕様(jsonapi.org)は、汎用JSONとJSON:APIペイロードを区別するための独自のメディアタイプを定義しています。

ヘッダー値

Content-Type: application/vnd.api+json

重要なルール

JSON:API仕様はContent-Typeヘッダーに関して厳格な要件があります:

  1. charsetパラメータなし:クライアントとサーバーはapplication/vnd.api+jsonを使用する際、Content-Typeヘッダーにメディアタイプパラメータ(charsetなど)を含めてはいけません。パラメータ付きのリクエストは415 Unsupported Media Typeレスポンスで拒否しなければなりません。

  2. Acceptヘッダー:クライアントはJSON:APIレスポンスを期待することを示すためにAccept: application/vnd.api+jsonも設定すべきです。

  3. 拡張ネゴシエーション:JSON:API 1.1ではextprofileパラメータによる拡張ネゴシエーションが導入されましたが、これらが唯一許可されたパラメータです。

リクエスト例

{
  "data": {
    "type": "articles",
    "attributes": {
      "title": "New Article",
      "body": "Article content..."
    },
    "relationships": {
      "author": {
        "data": { "type": "people", "id": "9" }
      }
    }
  }
}

curlの例

curl -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{"data":{"type":"articles","attributes":{"title":"Hello"}}}' \
  https://api.example.com/articles

ユースケース

Ember Data、JSONAPI::Resources(Ruby)、Laravel JSON:APIなど、JSON:API仕様に従うAPIの構築や利用時に使用します。

試してみる — Content-Type Header Builder

フルツールを開く