この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。 筆がのるときは連続投下です。 のらないときは沈黙しますが…
ついにEmber.js入門の連載が20回突破です! 今回はember-dataのREST APIにおけるメタデータの扱いについて説明します。
ember-dataを使ってモデルの一覧を取得する時、ページングなどを行いたい場合があります。 そのような場合は、クエリパラメータをREST APIに付与することができるため、ページ番号やソートキーなどをサーバに送信することができます。
// => http://ENDPOINT_URL/entry?page=3
this.store.find('entry', {
page: 3
});
純粋なREST APIにクエリパラメータを持たせることが、良いかどうかの議論には興味がありませんが、現実としてはクエリパラメータを必要とするシーンは多いでしょう。 このようなAPIを使う場合、取得できるモデル情報に加えて、総件数やページ毎の件数といったメタデータも一緒に返したい場合があります。
レスポンスJSONにメタデータを付与する
メタデータはレスポンスJSONに付与することで、クライアントプログラムから参照できるようになります。 自由な形式で記述してもカスタマイズすれば取得できますが、デフォルトのフォーマットは次のようにmetaというキーでオブジェクトを構成します。
{
'entries': [
{
id: 1,
title: 'お知らせ1',
content: 'お知らせです。',
category: 1
},
{
id: 2,
title: 'お知らせ2',
content: 'お知らせです。',
category: 1
}
],
"meta": {
"total": 120,
"page": 1
}
}
なお、これは言い換えると、metaという名前のモデルを定義すると命名規約的に被ってしまうため、挙動もあやしくなるということを意味します。 Ember.jsは暗黙のルールが多いフレームワークですので、この手の嵌まり所は嵌まって覚えるしかないと思います。
メタデータを取得する
プログラムでメタデータを取得するには、storeオブジェクトのmetadataForメソッドを利用します。
var meta = this.store.metadataFor("entry");
このようにすることで、検索クエリなどを扱った場合に、総件数などのメタデータがクライアントサイドで扱えます。