Field Expansionの和訳です。これを使うと、Batch Requestよりも手軽に複数のクエリを1つにまとめることができます。

実装例については、Graph APIを多用するときに便利な機能のFields Expansionを参照してください。

graph_api_explorer

以下、2012年9月4日 18:00更新部分までの本文です。

Graph APIの一機能であるField Expansionを使うと、複数のクエリを一度のリクエストにまとめることが可能になります。

つまりGraph API呼び出し時に、繋がりを持つオブジェクトをネストしてリクエストすることができるようになります。たとえば、一個目のKアルバムに紐づく最初のN枚の画像を一度に取得するなどです。レスポンスは階層構造を保っているので、開発者はFQLのマルチクエリやバッチリクエストのようにデータを組み直す必要がありません。基本的なGraph API利用のシンプルさを失わない機能拡張であるということです。

以前は、同等の問い合わせを行う方法はFacebook Query Language(FQL)だけでした。これだけ強力な機能であっても依然と同様にFQLを使わなくてはならないケースも出てくることを覚えておいてください。


Usage

Field Expansionを理解する一番の方法は、Graph Explorerを使ってクエリを組み立ててみることです。そこで組み立てられるクエリをリアルタイムに確認することで、シンタックス、識別子、フィールド、コネクションなどをを理解できます。ビルトインアクションカスタマイズしたアクションなどのコネクションを参照する場合には、Graph Explorerに自分で入力する必要があります。


Examples

Example 1: Basic Limit Query

以下のクエリは、ユーザオブジェクトのnameとbirthdayを返し、さらに直近10個のphotoオブジェクトのid,pictureフィールドを返します。

GET https://graph.facebook.com/me?fields=name,birthday,photos.limit(10).fields(id, picture)

Example 2: Using Valid Parameters

有効なパラメータであればどれでも使うことができます。たとえばvideoオブジェクトであれば、uploadedもしくはtaggedを指定するtypeパラメータを渡すことができます。

上述したクエリを書き換え、ユーザがタグ付けされたビデオ10個も取得するようにしてみましょう。

GET https://graph.facebook.com/me?fields=name,birthday,photos.limit(10).fields(id,picture),videos.type(tagged).limit(10).fields(id, source)

Example 3: Nesting

以下のサンプルは、ユーザのアルバムを最大5件と、それぞれのアルバムに紐づく最初の写真オブジェクト2つ、その写真にタグ付けされたユーザを取得しています。

GET https://graph.facebook.com/me?fields=albums.limit(5).fields(name, photos.limit(2).fields(name, picture, tags.limit(2)))
{
   "id": "5000388",
   "albums": {
      "data": [
         {
            "name": "My Uploads",
            "id": "167343188",
            "created_time": "2009-10-31T01:16:01+0000",
            "photos": {
               "data": [
                  {
                     "name": "Raising a Plant",
                     "picture": "https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash3/5686_10150636498189_1775439_s.jpg",
                     "id": "101363649819",
                     "created_time": "2012-06-23T06:31:53+0000"
                  },
                  {
                     "name": "Dressed up",
                     "picture": "https://fbcdn-photos-a.akamaihd.net/hphotos-ak-snc6/1392_101509832589_25596_s.jpg",
                     "id": "100989593189",
                     "created_time": "2012-06-23T01:18:07+0000",
                     "tags": {
                        "data": [
                           {
                              "id": "10000002867",
                              "name": "S\u0142awek",
                              "x": 52.9363,
                              "y": 24.4722,
                              "created_time": "2012-06-23T19:11:08+0000"
                           }
                        ]
                     }
                  }
               ],
               "paging": {
                  "next": "https://graph.facebook.com/1673988/photos?limit=2&fields=name,picture,tags.limit\u0025282\u002529&after=MTAxNTA5ODMyNOTMxODk\u00253D"
               }
            }
         },
         ...
}

Example 4: Nested Identifiers

Field Expansionはコネクションに対してのみではなく、識別しに対しても同様に働きます。

GET https://graph.facebook.com/<photo_id>/comments?fields=from.fields(id, name, birthday)

Example 5: Nesting Open Graph Objects

ビルトインアクションカスタマイズしたアクションのデータを取得することも可能です。これらはGraph Explorerのドロップダウンメニューから選択することはできませんから、自分で入力しなくてはなりません。手入力されたクエリでも同様に実行できます。

以下のクエリは、友達が読んだ直近2個の記事オブジェクトと友達オブジェクト10個を一度に取得します。他のどのクエリとも同様、データを取得するには適切なパーミッションを取得している必要があります。このケースでは、Open Graph permissionsのうちfriends_actions.newsが必要です。

GET https://graph.facebook.com/me/friends?limit=10&fields=news.reads.limit(2)