我有一个REST服务,它返回一个对象列表。每个对象都包含objectcode
和objectname
。
这是我第一次构建REST服务,因此我不确定如何格式化响应。
应该是:
{
"objects": {
"count": 2,
"object": [
{
"objectcode": "1",
"objectname": "foo"
},
{
"objectcode": "2",
"objectname": "bar"
},
...more objects
]
}
}
OR
[
{
"objectcode": "1",
"objectname": "foo"
},
{
"objectcode": "2",
"objectname": "bar"
},
...more objects
]
我意识到这可能有点主观,但更容易消费?我还需要稍后支持XML格式的响应。
答案 0 :(得分:3)
它们是相同的消耗,因为库处理两者都很好。第一个优先于第二个优势:您将能够扩展响应以包含对象之外的其他信息(例如,类别),而不会破坏现有代码。
像
这样的东西{
"objects": {
"count": 2,
"object": [
{
"objectcode": "1",
"objectname": "foo"
},
{
"objectcode": "2",
"objectname": "bar"
},
...more objects
]
}
"categories": {
"count": 2,
"category" : [
{ "name": "some category"}
]
}
}
此外,不应该以任何方式格式化json,因此删除空格,换行符等。此外,计数不是必需的,因为它将在解析对象本身时保存。
答案 1 :(得分:2)
我经常看到第一个。有时,操纵数据以获取元数据更容易。例如,谷歌API使用第一个:http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true
答案 2 :(得分:1)
这不仅仅是个人偏好的问题;这也是你的要求的问题。例如,如果我处于相同的情况并且我确实需要在客户端进行对象计数,那么我将采用第一种方法,否则我将选择第二种方法。
另请注意,“经典”REST服务器的工作方式大多不同。如果某个REST函数要返回一个对象列表,那么它应该只返回那些对象的 URL 列表。 URL应指向详细信息端点 - 因此,通过查询每个端点,您可以获得有关特定单个对象的详细信息。
答案 3 :(得分:-1)
作为客户,我更喜欢第二种格式。如果第一种格式只包含"对象"的数量,则这是多余的信息。