0

我正在开发一个 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.

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

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

4

1 回答 1

0

我通常不使用pagination物品。我实际上添加了适当的链接rel这是 rels 的列表

有一个Collection+JSON 媒体类型

有一个标准的RFC 6573

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

于 2012-11-22T10:19:55.327 回答