我正在开发一个 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
}
}
我什至可以简化关键的事情,以传统方式使用collection
和item
.
一些策略建议总是使用集合并返回单个项目,但这对我来说听起来很不自然,我请求一个返回实体的端点,我除了看到一个集合之外,即使只有一个项目也是如此。
是否有任何规范化的 json 模式来解决这个问题?