Javascript restful响应中的json数据是否应该包含对象类型信息?
假设我们想要填充一些javascript模型(例如backbone.js模型),给定来自如下服务器的json响应:Javascript restful响应中的json数据是否应该包含对象类型信息?,javascript,json,rest,backbone.js,Javascript,Json,Rest,Backbone.js,假设我们想要填充一些javascript模型(例如backbone.js模型),给定来自如下服务器的json响应: { "todo": { "title": "My todo", "items": [ { "body": "first item." }, { "body": "second item"} ] } } 此数据不包含类型信息,因此当我们看到“todo”键时,我们不知道要填充哪个模型 当然,可以创建一些自定义标准,将json响应
{
"todo": {
"title": "My todo",
"items": [
{ "body": "first item." },
{ "body": "second item"}
]
}
}
此数据不包含类型信息,因此当我们看到“todo”
键时,我们不知道要填充哪个模型
当然,可以创建一些自定义标准,将json响应对象中的键链接到客户端模型。例如:
{
"todo": {
"_type": "Todo",
"title": "My todo",
...
}
}
虽然这适用于对象,但在列表中会变得很尴尬:
"items": {
"_type": "TodoItem",
"_value": [
{ "body": "first item." },
{ "body": "second item"}
]
}
在创建此自定义规则之前,问题如下:
- 在响应数据中包含客户端类型信息方面是否有任何RESTful指南
- 如果不是,在响应json中包含客户端类型信息是否是一个好主意
- 除了填充模型的整个方法之外,还有什么其他的替代方法
/todo
和/user
,但这种方法的问题是,N个模型的初始填充将意味着N个http请求
相反,初始填充可以从一个只有1个请求的大型合并树中完成。在这种情况下,url中的模型类型信息将丢失
Re:嵌套模型。这是一张照片 考虑一下,正如在其他答案中所说的,在REST中,每个资源都有自己的端点,因此您试图做的事情(即将所有模型隐藏在一个端点后面)并不完全符合REST,IMHO。这本身没什么大不了的 这里的答案可能是嵌套集合 “包装器”集合在初始化时从单个端点获取所有模型,并将它们推送到各自的集合中。当然,您必须在json中发送类型信息 从那时起,每个“内部”集合对自己的事件作出反应,并处理自己的端点
我不认为这种优化有什么大问题,只要你知道。当你有一个模型扩展另一个模型时,它真的很有用。指出具体使用哪种模型可以消除混淆这是一个很好的观点,但这种方法的问题是初始的大树填充:如果我们有10个不同的模型要初始填充,我们不希望发送10个http请求来填充每个模型。而且,使用这种方法意味着没有嵌套模型。你将如何用这种方法处理这些问题?第二种方法让我们回到原来的问题。当“一个模型一个模型地输入”时,我们如何知道哪些数据与哪个模型关联?树响应将是一个json obj,每个模型都有一个数组。例如,属性(每个都是一个数组)将是用户、帖子、评论等。它们将与用户、帖子、评论模型的集合相匹配。数组名称(用户)将指示数组元素是用户模型。这种命名风格来自Rails,它工作得很好。您所描述的类似于
{“posts”:[…],“comments”:[…],…}
,它不是真正的树。树类似于:“posts”:[{“comments”:[…]},…]
。仅当每个树节点只有一个模型类型时,根据约定将键关联到模型类型才有效。例如,当一篇文章有启用的\u注释
和禁用的\u注释
时,两者都具有相同的集合类型。为什么将所有模型关联到一个端点不是RESTful的?单端点资源包装器不能被认为是资源本身吗?我正是这样写的,但感觉有点牵强:)基本原理是:在应用程序中,您不会将整个状态对象作为资源来操作,而是操作单个模型,而这些是您的资源。现在我同意你的观点,你说的任何话都是一种资源,它是一种资源:我同意,它是哲学的(让我想起了后与后的辩论)。