NDBを使用するGoogle App EngineプロジェクトでEmberJsとEmber-Dataを使用しています。データベースには、ホスト、プローブ、およびチェックのエンティティがあります。Emberデータネストされたモデル
class Host(ndb.Model):
hostName = ndb.StringProperty()
hostKey = ndb.Key('Host', 'SomeHostId')
class Probe(ndb.Model):
checkName = ndb.StringProperty()
probeKey = ndb.Key('Host', 'SomeHostId', 'Probe', 'SomeProbeId')
class Check(ndb.Model):
checkName = ndb.StringProperty()
checkKey = ndb.Key('Host', 'SomeHostId', 'Probe', 'SomeProbeId', 'Check', 'SomeCheckId')
私は、各ホストは、いくつかのプローブを持っていることを示すためにキーを追加しました:データベースモデルではなく、実際問題として、長い間、私は順番に私のREST APIを持っているとしてではなく、明確にするために、私のデータベースクラスしているここにありませんそれぞれのプローブはいくつかのチェックを行います。私App.Jsで
- ホスト
- プローブ
- チェック
- プローブ
私は、次のモデルを定義している:
App.Host = DS.Model.extend({
hostName: DS.attr('string')
probes: DS.hasMany('probe',{async:true})
});
App.Probe = DS.Model.extend({
host: DS.belongsTo('host'),
probeName: DS.attr('string')
checks: DS.hasMany('check',{async:true})
});
App.Check = DS.Model.extend({
probe: DS.belongsTo('probe'),
hostName: DS.attr('string')
});
私は、次のルータを定義している:
app = webapp2.WSGIApplication([
('/', MainHandler),
webapp2.Route('/hosts', HostsHandler),
webapp2.Route('/hosts/<hostId>/', HostHandler),
webapp2.Route('/hosts/<hostId>/probes', ProbesHandler),
webapp2.Route('/hosts/<hostId>/probes/<probeId>/checks', ChecksHandler),
webapp2.Route('/hosts/<hostId>/probes/<probeId>/checks/<checkId>/', CheckHandler)
])
{
"hosts": [
{
"hostName": "SomeHostName1",
"id": "SomeHostId1"
},
{
"hostName": "SomeHostName2",
"id": "SomeHostId2"
}
]
}
http://example.com/hosts/SomeHostId1/probesリターン:
App.Router.map(function() {
this.resource('hosts', function(){
this.resource('host', { path:':host_id'}, function(){
this.resource('probes', function(){
this.resource('probe', { path:':probe_id'}, function(){
this.resource('checks', function(){
this.resource('check', { path:':check_id'}, function(){
});
});
});
});
});
});
});
そして、次のURLパスを構築した場合のAppEngineで
{
"probes": [
{
"probeName": "SomeProbeName1",
"id": "SomeProbeId1",
"host_id": "SomeHostId1"
},
{
"probeName": "SomeProbeName2",
"id": "SomeProbeId2",
"host_id": "SomeHostId1"
}
]
}
の
http://example.com/hosts/SomeHostId1/probes/SomeProbeId1/checksリターン:
{
"checks": [
{
"checkName": "SomeCheckName1",
"id": "SomeCheckId1",
"probe_id": "SomeProbeId1"
},
{
"checkName": "SomeCheckName2",
"id": "SomeCheckId2",
"probe_id": "SomeProbeId1"
}
]
}
私のテンプレートがありません。今、私はこのすべてを持っている
<script type="text/x-handlebars" id="host">
<h3>{{hostName}}</h3>
{{#link-to 'probes' probes}}probes{{/link-to}}
{{outlet}}
</script>
<script type="text/x-handlebars" id="probes">
{{#each probe in probes}}
Probe: {{probe.probeName}}
{{#link-to 'checks' probe.checks}}checks{{/link-to}}
{{/each}}
{{outlet}}
</script>
<script type="text/x-handlebars" id="checks">
{{#each check in checks}}
Check: {{check.checkName}}
{{/each}}
</script>
...しかしエンバー・データは、右のhttpを作るようにそれを一緒にタイアップする方法見当もつかないリクエスト。これまでのところ、私はリクエストを見ただけですhttp://example.com/modelName/
埋め込みレコードとネストされたAPIルートは、全く異なる2つのものです。 –
私は、この質問に最初にいくつかのビューを取得し、あなたの答えを受け入れるよ。私は賞金を加えてもっと注意を喚起した。うまくいけばそれは助ける;) –
2年後の更新? – Joe