makeRequest関数の使用方法
それでは、外部サーバとの連携を担う、makeRequest関数の使用方法を解説します。まず、makeRequest関数は次のようなシグネチャを持っています。
makeRequest(url, callback, opt_params)
それぞれの引数は次のような意味を持っています。
引数 | 意味 |
url | アクセス先のURL |
callback | 結果取得時に呼び出されるコールバック関数 |
opt_params | リクエストのパラメータ |
url引数には、実際にアクセスを行いたいサービスのURLを指定します。HTTP/HTTPS両プロトコルに対応しています。リクエストのパラメータと、コールバック関数での処理について、詳しく見てみましょう。
makeRequest関数のリクエストのパラメータ
インターネット上で公開されているWebサービスには、シンプルなHTTP GET形式で呼び出すサービスや、HTTP POSTでデータを送信して結果を取得するサービスなど、さまざまな呼び出し方式があります。makeRequest関数の引数として渡すリクエストのパラメータで、さまざまな方式に対応することができます。
指定可能なパラメータはgadgets.io.RequestParametersクラスに定義されており、次のように、複数のパラメータをハッシュで指定することができます。
var params = {}; //パラメータ格納用のハッシュ //HTTPメソッドを指定するパラメータ params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET; //結果を取得する形式を指定するパラメータ params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.FEED; //複数のパラメータを指定しての呼び出し gadgets.io.makeRequest(url, callback,params);
ここでは、RequestParametersクラスで定義されたパラメータの主なものを説明します。
HTTPメソッドの指定
gadgets.io.RequestParameters.METHODパラメータは、外部サーバへリクエストする際のHTTPメソッドを指定するためのパラメータです。指定する値はgadgets.io.MethodTypeクラスで定義されており、GET,POST,PUT,DELETEなどの種類を指定できます。
POSTするデータの指定
gadgets.io.RequestParameters.METHODパラメータでPOSTを指定した場合、外部サーバへPOSTするデータをgadgets.io.RequestParameters.POST_DATAパラメータに設定します。
データはgadgets.io.encodeValues関数でエンコードして指定します。
以下に例を示します。
//HTTPメソッドを指定 params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST; //POSTするデータ var postData = {param1: "some-value"}; //POSTデータをエンコードしてパラメータに指定する params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
取得形式の指定
gadgets.io.RequestParameters.ContentTypeパラメータは、取得結果の形式を指定するためのパラメータです。gadgets.io.ContentTypeクラスに次のような値が定義されています。
引数 | 意味 |
DOM | 結果をXMLとして解析し、DOMオブジェクトとして返す |
FEED | 結果をRSSかATOM形式によるフィードと見なして解析し、JSON形式で返す |
JSON | 結果をJSON形式で返す |
TEXT | 結果をそのまま文字列として返す |
あらかじめ外部サーバから取得する形式が分かっている場合には、それに沿った形式を選択することで、OpenSocialコンテナ側で解析処理を行ってくれますので、コールバック関数での処理が簡略化されます。特に、RSSやATOMを解析したうえでJSON形式で返すFEEDは、定型処理を省くことができるので有用でしょう。
デフォルトでは、結果をそのまま文字列として返すTEXTが指定されます。
認証許可要求・署名付きアクセスの指定
gadgets.io.RequestParameters.AUTHORIZATIONパラメータは、外部サーバへのアクセスの際に認証許可要求や署名付きアクセスを行うかどうかを指定するためのパラメータです。
gadgets.io.AuthorizationTypeクラスに次のような値が定義されています。
引数 | 意味 |
NONE | 認証を行わない |
OAUTH | OAuthによる認証許可認可要求を行う(mixiアプリは現状非対応) |
SIGNED | OpenSocialコンテナの署名付きリクエストを行う |
OAuthとは、認証の必要なWebサービスを、他のサイトから呼び出せるようにするための仕組みです。例えば、画像共有サイトやオンラインストレージサイトに保存している自分のデータに、オンライン写真印刷サービスやオンラインオフィスサービスが直接アクセスすることを許可する、といったケースで使用します。この際、ユーザーの認証情報をオンライン写真印刷サービスやオンラインオフィスサービスのサーバに入力する必要はありませんので、外部のサービスから認証情報が漏れてしまう心配がありません。
現状mixiアプリはOAuthに対応していません。例えばTwitterはOAuthに対応していますが、Twitterに投稿するmixiアプリを作成する場合には、今のところOAuthを使うことができないため、アカウント情報をmixiアプリに入力する必要があります。
署名付きリクエストとは、呼び出し先のWebサービスに対し、呼び出し元のサーバのRSA証明書による署名を付けてリクエストを行うことです。呼び出し先のWebサービスでは、署名を使うことで、以下の事柄を検証することができます。
- 呼び出し元が確かに意図したOpenSocialコンテナであること
- 呼び出しの際のリクエストが改ざんされていないこと
署名付きアクセスに対応するためには、外部のWebサービスでの対応が必要となります。
ミクシィ ディベロッパーセンターでは、PHP,Java,C#で署名付きリクエストを行う方法が紹介されていますので、参考にしてください。mixiアプリからの署名付きリクエストを検証する際に使用する公開鍵も公開されています。
デフォルトでは、認証要求・署名付きリクエストを行わないNONEが指定されます。
コールバック関数でのレスポンス処理
OpenSocialコンテナでWebサービスへのリクエストが行われ、取得処理が完了すると、makeRequest関数で指定したコールバック関数に結果が渡されます。実際のデータはコールバック関数に渡されたオブジェクトのdataプロパティから取得できます。
レスポンスの処理は、makeRequest関数で指定した形式に従って行う必要があります。例えば、内容をRSSやATOMとして解析し、JSON形式で結果を返すFEEDを指定した場合、次のように処理します。
function callback(response) { var feed = response.data; //dataプロパティから、取得結果を取得 var title = feed.Title; //タイトルを取得 var link = feed.Link; //リンクを取得 var entries = feed.Entry; //エントリ一覧を取得 for (var i = 0; i < entries.length; i++) { var entry = entries[i]; //エントリを取得 var entryTitle = entry.Title; //エントリのタイトルを取得 …… } }
取得した内容をOpenSocialアプリケーションの画面上に表示する際は、これまでの連載で解説してきたように、DOM操作などで行います。