对于这是一个基本问题,我们深感抱歉,但是由于我还很陌生,所以我想知道这种情况下是否有最佳实践。例如,我有以下端点,它们返回下面的有效负载:
https://api.example.com/v1/user
[
{
"user": "user1",
"firstName": "Foo1",
"lastName": "Bar1",
"url": "https://api.example.com/v1/user/user1"
},
{
"user": "user2",
"firstName": "Foo2",
"lastName": "Bar2",
"url": "https://api.example.com/v1/user/user2"
}
]
每个“ url”端点都返回如下内容:
https://api.example.com/v1/user/user1
{
"user": "user1",
"firstName": "Foo1",
"lastName": "Bar1",
"age": 21,
"address": "User1 Address"
... more info ...
}
我们看到"/user"
中的某些属性在"/user/user1"
中重复了。
创建"user"
模型的最佳实践是什么?
我应该有两个模型吗?例如,例如"users"
的{{1}}模型和"/user"
的{{1}}模型?
以某种方式可以同时满足两个端点的模型"user"
吗?
谢谢!
答案 0 :(得分:1)
这几乎是用例described in the one-to-one docs,您将在其中用一个模型定义用户数据,然后将另一个模型与belongsTo属性链接起来:
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
user: DS.attr('string'),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
url: DS.attr('string'),
profile: DS.belongsTo('profile')
});
然后使用您想要添加的任何其他值来建立配置文件模型,并同时定义EmiratesTo属性:
// app/models/profile.js
import DS from 'ember-data';
export default DS.Model.extend({
age: DS.attr('string'),
address: DS.attr('string'),
user: DS.belongsTo('user')
});
在路由文件中,您需要设置用户ID来定义您的URL结构,如下所示:
//app/router.js
Router.map(function() {
this.route('users');
this.route('user', { path: '/user/:user_id' });
});
最后,您需要加载数据retrieving the related records并通过路由文件将其加载。
// app/routes/user.js
import Route from '@ember/routing/route';
export default Route.extend({
model(params) {
return this.store.findRecord('user', params.user_id, {include: 'profile'});
}
});
值得指出的是,您也可以need a serializer将数据整理成所需的格式。