所以我正在构建一个基于RESTful JSON的API,其中一个结果是用户所做的“活动源”(想想:Facebook新闻源)。
API的示例用例:
根据用户的ID,返回最近的N个活动
活动可能是:回答问题,收集帖子,撰写评论等。每项活动都有不同的信息。
如何在JSON响应中构建它? API的客户端既是JavaScript / SPA应用程序又是移动应用程序(iOS,android等)
很少有想法浮现在脑海中。
为每种类型的活动设置不同的子模型,每个活动都有一个“订单”属性,以便客户知道在Feed中显示项目的顺序
例如 - 获取最近的3个活动:
{
"answers": [
{
"createdOn": "2013-09-09T23:24:46.303",
"order": 1,
"question": {
"title": "Loren Ipsum"
},
"answer": "blah blah"
},
{
"createdOn": "2013-09-09T23:24:46.303",
"order": 3,
"question": {
"title": "Loren Ipsum 2"
},
"answer": "blah blah 2"
}
],
"favourites": [
{
"createdOn": "2013-09-09T23:24:46.303",
"order": 2,
"favourite": {
"id": 1
}
},
]
"totalItems": 30
}
然后,客户端将提取order
属性以了解首先显示哪个活动。
带有“类型”属性的混合结果包
{
"items": [
{
"type": "answer",
"createdOn": "2013-09-09T23:24:46.303",
"question": {
"title": "Loren Ipsum"
},
"answer": "blah blah"
},
{
"type": "favourite",
"createdOn": "2013-09-09T23:24:46.303",
"favourite": {
"id": 1
}
},
{
"type": "answer",
"createdOn": "2013-09-09T23:24:46.303",
"question": {
"title": "Loren Ipsum 2"
},
"answer": "blah blah 2"
}
]
"totalItems": 30
}
主响应是否具有类型/ ID,然后为每个活动分隔端点
{
"items": [
{
"type": "answer",
"id": 332423
},
{
"type": "favourite",
"id": 552342
},
{
"type": "answer",
"id": 75544
}
]
"totalItems": 30
}
(..然后activities/answer/{id}
得到答案,例如)
我可以在这里获得一些建议/指导吗?任何人都知道Facebook如何做到这一点?
答案 0 :(得分:0)
考虑支持此终端:
GET /activities?mostRecent=25&details=Yes
// or details=No, or True/False
如果客户请求详细信息,那么他们会根据上面的选项(2)获取完整的活动对象。如果客户端没有请求详细信息,则响应是最近活动的列表:
{
"items": [
{
"type": "answer",
"self": "/answers/332423"
},
{
"type": "favourite",
"self": "/favourites/552342"
}
]
"totalItems": 2
}
如果所有活动都属于同一类型,那么最好让查询参数准确指定哪些细节来自网络,但是当多个类型返回时,这变得非常混乱。 details=Yes/No
是一种钝器,但我认为这是你最好的选择。我建议不要将默认设置为最小化网络流量 - 否则客户可能会收到他们真正不关心的数据。
最好包含URI而不仅仅是ID。这使您的服务器可以在以后移动/更改URI而不会破坏客户端。并不是说这样做是可取的,但是这样,如果你必须对客户端仍然有效。