如何表示资源及其相应集合的宁静表示?

时间:2012-11-21 09:59:15

标签: json api rest data-structures

我正在研究API,我需要返回资源/实体等。

示例:

GET /articles?limit=20&page=5获取包含20个项目的远程集合。

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
  }
}

我甚至可以简化常规使用collectionitem之类的关键内容。

一些策略建议总是使用一个集合并返回单个项目,但这对我来说听起来不自然,我请求一个返回一个实体的端点,除了看到一个集合,我没有,即使只有一个项目。< / p>

是否有任何规范化的json架构来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我通常不使用pagination项。我实际上添加了相应rel的链接。 Here is the list of rels

Collection+JSON media-type

有一个标准RFC 6573

通过遵循这些约定,您坚持使用HATEOAS,从而将应用程序与客户端分离。