在阅读了关于REST响应中嵌套结构的优秀线程REST Complex/Composite/Nested Resources之后,我仍然有一个问题。对于响应的表现,最佳选择是什么?
让我们举个例子。
我有一个Category
对象,其中包含一些Questions
。那些Questions
包含一些Answers
。所有这些结构都有元信息。
现在,在查询像GET http://<base_url>/categories/
这样的网址时,我是否应该只包含类别的说明,请包含问题说明?哪一个,完整描述或简化?
换句话说,这些之间的最佳解决方案是什么:
{
"results":[
{
'id':1,
'name':'category1',
'description':'foobar',
'questions':[
{
'id':1234,
'question':'My question',
'author' : 4235345,
'answers':[
{
'id':56786,
'user':456,
'votes':6,
'answer':'It's an answer !'
},
{
'id':3486,
'user':4564,
'votes':2,
'answer':'It's another answer !'
},
]
},
...
]
}
...
]
}
或解决方案2:
{
"results":[
{
'id':1,
'name':'category1',
'description':'foobar',
'questions':[
{
'id':1234,
'url':'http://foobar/questions/1234'
'answers':[
{
'id':56786,
'url':'http://foobar/answers/56786'
},
{
'id':3486,
'url':'http://foobar/answers/3486'
},
]
},
...
]
}
...
]
}
OR SOLUTION 3:
{
"results":[
{
'id':1,
'name':'category1',
'description':'foobar',
'questions':'http://foobar/categories/1/questions'
}
...
]
}
或许是另一种解决方案?
谢谢!
答案 0 :(得分:1)
这取决于应用程序将对数据执行的操作。如果它只显示一个类别列表,那么一次传输它所需的所有数据是非常低效的,特别是如果类别很多,这将减少用户的响应时间(绝对不是否)。
这些情况严重依赖于数据的应用和使用。
我们可以做的一个优化是,我们可以创建两个请求,
GET http://<base_url>/categories
将立即返回最小数据和另一个请求,
GET http://<base_url>/categories?all=true
将返回所有数据。
然后客户端应用程序可以进行一些巧妙的优化,例如,当用户请求类别时,请求一个发送并且它将立即呈现数据。然后在获取类别列表后,用户将闲置一段时间,我们可以利用此机会使用请求2请求所有数据。
但是,正如我所说,这在很大程度上取决于应用程序。