0

私は API に取り組んでおり、リソース/エンティティなどを返す必要があります。

例:

GET /articles?limit=20&page=520 個のアイテムで範囲指定されたコレクションを取得します。

GET /articles/25一意に識別されたアイテムを取得します。

基本的に、これらのリソースをそれぞれ次のように表します。

コレクション:

[
  {
    "id": 12,
    "title": "foo"
  },
  {
    "id": 25,
    "title": "bar"
  }
]

ユニークなアイテム:

{
  "id": 25,
  "title": "baz"
}

これは自然に聞こえます。

しかし、ページネーション データを含めたい場合はどうすればよいでしょうか。

コレクションでは、次のようなことができます。

{
  "collection": [
    {
      "id": 12,
      "title": "foo"
    },
    {
      "id": 25,
      "title": "bar"
    }
  ],
  "pagination": {
     "item_count": 2,
     "page": 5,
     "limit": 20,
     "total": 102
  }
}

ユニークなアイテムはそのままにしておくことができますが、私には少し矛盾しているように見えます.消費者はどのようにしてコレクションとユニークなアイテムを検出できますか? 彼は「コレクション」キーを確認する必要がありますか?

私が考えているのは、次のような結果を「入力」することです。

単一のアイテムの場合:

{
  "type": "item",
  "model": "article",
  "resultKey": "article",
  "article": {
    "id": 25,
    "title": "baz"
  }
}

コレクションの場合:

{
  "type": "collection",
  "model": "article",
  "resultKey": "articles",
  "articles": [
    {
      "id": 12,
      "title": "foo"
    },
    {
      "id": 25,
      "title": "bar"
    }
  ],
  "pagination": {
    "item_count": 2,
    "page": 5,
    "limit": 20,
    "total": 102
  }
}

collectionやのようなものを慣用的に使用するために、重要なことを単純化することもできますitem

常にコレクションを使用して単一のアイテムを返すという戦略のアドバイスがありますが、私には不自然に聞こえます.エンティティを返すエンドポイントを要求します.アイテムが1つしかない場合でも、コレクションを表示することを除いては.

この問題を解決するための正規化された json スキーマはありますか?

4

1 に答える 1