我正在研究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
之类的关键内容。
一些策略建议总是使用一个集合并返回单个项目,但这对我来说听起来不自然,我请求一个返回一个实体的端点,除了看到一个集合,我没有,即使只有一个项目。< / p>
是否有任何规范化的json架构来解决这个问题?
答案 0 :(得分:0)
我通常不使用pagination
项。我实际上添加了相应rel
的链接。 Here is the list of rels
有Collection+JSON
media-type。
有一个标准RFC 6573。
通过遵循这些约定,您坚持使用HATEOAS
,从而将应用程序与客户端分离。