はじめに
本連載ではここまで、ソーシャルデータの取得とアクティビティの作成について説明してきました。OpenSocialアプリケーションに欠かせないもう一つの機能が、今回扱うデータの永続化です。一般的なアプリケーションでユーザーが入力したデータなどをファイルやデータベースに保存するように、OpenSocialアプリケーション内で扱うデータについても、この永続化機能を使ってOpenSocialコンテナ上に保存することができます。OpenSocial JavaScript APIでは、このアプリケーションデータの永続化機能をPersistence APIと呼んでいます。
Persistence APIは、ただアプリケーションの利用者のデータの保存、取得を行うだけでなく、他のユーザーのデータを取得することもできます。他のユーザーのデータの取得が可能になることから、Persistence APIは単なるデータ入出力機能ではなく、ソーシャルネットワークを生かした情報共有を行うための機能と言えます。
Persistence APIで扱うデータ
Persistence APIで扱うことのできるデータは、一般にKey-Value形式と呼ばれる、名前と文字列値のセットです。以下の図のように、アプリケーションごとにデータ保存用の領域がOpenSocialコンテナ上に確保され、そこにユーザーごとにKey-Value形式のデータを複数保存することができます。
図中にも示したとおり、値として文字列を保存できますので、複雑な構造を持つデータを保存する際にはJSON(JavaScript Object Notation)形式での保存も可能です。
Persistence APIでデータを保存・削除することができるのは、現在そのアプリケーションを動かしているユーザー(VIEWER)についてのデータのみです。
取得に関しては、そのアプリケーションをインストールしているユーザーのデータであれば、誰のデータでも取得することができます。従って、マイミクに入っているかどうか、といった条件はなく、同じアプリケーションをインストールしているすべてのユーザーの間でデータは読み取り可能です。
mixiアプリにおいては、各項目の値の最大サイズは64KBまで、1ユーザーが1アプリに保存可能な最大容量は10MBに制限されています。
Persistence APIの使用方法
前述の通り、Persistence APIはアプリケーションのデータをネットワークを介してOpenSocialコンテナ上に保存します。Persistence APIを使うためには、第4回での登場以来おなじみの、DataRequestオブジェクトを使用します。
DataRequestオブジェクトの使い方はこれまでと同様で、以下の手順です。
- DataRequestオブジェクトの作成
- DataRequestオブジェクトのメソッドで、リクエストを作成
- 1つないしは複数のリクエストをDataRequestオブジェクトに格納してOpenSocialコンテナに送信する
- OpenSocialコンテナからのレスポンスを処理する
Persistence APIには次のとおり、アプリケーションデータの格納・取得・削除を行うための3つのリクエストが存在します。
メソッド名 | 概要 |
newUpdatePersonAppDataRequest | データを保存するリクエストを作成 |
newFetchPersonAppDataRequest | データを取得するリクエストを作成 |
newRemovePersonAppDataRequest | データを削除するリクエストを作成 |
それでは、各リクエストの使い方について考えましょう。
アプリケーションデータの保存
個人のアプリケーションデータを保存するリクエストを作成するnewUpdatePersonAppDataRequestメソッドは、以下の3つの値を引数として指定します。
- 所有者
- 項目名
- 値
1. 所有者
第4回で解説した、個人を特定するためのPersonIDを指定します。ただし、前述の通りアプリケーションの利用者(VIEWER)の値のみを設定することができますので、この引数はVIEWERを表すopensocial.IdSpec.PersonId.VIEWERで固定です。
2. 項目名
データの項目名を文字列で指定します。
3. 値
データの値を文字列で指定します。前述の通り、JSON形式での値も設定することができます。
以下にリクエストの作成例を示します。
var updateRequest1 = req.newUpdatePersonAppDataRequest(opensocial.IdSpec.PersonId.VIEWER, "message1", "Hello !"); //VIEWERについて、"message1"という項目名で"Hello !"という値を保存する var updateRequest2 = req.newUpdatePersonAppDataRequest(opensocial.IdSpec.PersonId.VIEWER, 'app-setting', '{"id":"john", "style":"fancy"}'); //VIEWERについて、app-settingという項目名でJSON形式のデータを保存する