6 月 16 2008

OpenSocial RESTful API Specificationを翻訳しました

Published by えーじ under OpenSocial

これまで公開していたOpenSocial RESTful API Proposalの翻訳を、OpenSocial v0.8仕様のリリースで公開されたOpenSocial RESTful API Specificationに置き換えました。

ただし部分更新処理の項目についてはTBD(To Be Determined)のままになっています。問い合わせしているので、最新版に更新され次第アップします。

4 月 19 2008

MySpaceのRESTful APIでOAuth認証を試してみる

Published by えーじ under OAuth

MySpaceで公開されているMDP(MySpace Developer Platform)には、OpenSocialだけでなく独自のRESTful APIも含まれており、これを使うことでサーバーサイドにアプリケーションを作ることもできるようになっています。今回は、MDPのRESTful APIのOAuth認証にフォーカスを当ててみます。

OpenSocial/MDPのOAuthについて

OAuthとは、ユーザーとユーザーが利用したいサービス(以後サービスプロバイダ)を仲介するOpenSocial等のコンテナ(以後コンシューマ)が、サービスプロバイダの認証情報を知ることなくAPIを操ることを可能にする、認可のためのプロトコルです。

例えばユーザーがコンシューマ上でサービスプロバイダのアプリを利用しようとすると、サービスプロバイダのドメイン上にある認証画面にリダイレクトされ、ユーザーが許可をし、そこではじめて、コンシューマがサービスプロバイダのAPIを利用可能になる、という使い方が想定されています。

しかし、現在のところOpenSocialで規定されているOAuthはフルスペックではありません。ユーザーがサービスプロバイダの認証画面にリダイレクトされたり、コンシューマとサービスプロバイダがトークンを交換したりといった仕様は想定されていないのです。

これはOpenSocialガジェットがJavaScriptで動作しているためトークンを管理できない、等の理由があるようですが、MySpace独自のRESTful APIでも条件は同じようで、コンシューマキーとコンシューマシークレットがあれば、トークンなしでOAuth認証を行うことができます。

※OAuthの詳しい仕様に関してはこの辺りを参考にしてください。

アプリケーションプロフィールを作る

まずはMySpaceでアプリケーションを作る準備をします。

MySpaceでアプリケーションを作るためには、ユーザーアカウントとアプリケーションのプロフィールアカウントが必要です。下記のサイトにスクリーンショット付きで解説がありますので、参考にしてください。

MySpaceアプリケーションを作ろう - ラーニング人生。

OAuth認証の準備

アプリケーションプロフィールが作れたら、XMLやJavaScriptのコードは不要です。今回の目的はRESTful APIの認証を試すところにありますので、画面左のMy Appsをクリックし、作成したアプリケーションプロフィールのEdit Detailsをクリックしてください。

画面下部にOAuth Consumer KeyとOAuth Consumer Secretという部分があります。RESTful APIにアクセスするには、これらが必要になりますので、メモ帳などにコピペしておいてください。OAuth Consumer Keyは任意に変更できますので、変更してもよいかもしれません(保存は忘れずに)。 

OAuth Toolで認証してみる

OAuthではコンシューマキーとNonce、Timestampなどから署名(Signature)を作って認証を行います。署名の作り方は複雑なので、今回はMDPで提供されているOAuth Toolを使って試してみます。

画面右にある項目を埋めていきます。

  • Server: サーバーURL。RFC3986で言うschemeとauthorityに当たります。ここではhttp://api.myspace.comとします。
  • ResourceURL: サーバーURL以降のパス。RFC3986で言うpathに当たります。queryとfragmentは含みません。ここは/users/{user_id}/friendsとして、user_idにはあなたのユーザーIDを入力してください。他の利用可能なエンドポイントはここに記載されています。
  • Request Method: HTTPメソッド。GETとします。
  • Consumer Key: OAuthのコンシューマキー。先程メモったConsumer Keyを入力してください。
  • Consumer Secret: OAuthのコンシューマシークレット。先程メモったConsumer Keyを入力してください。
  • OAuth Token: トークン。正式なOAuthではサービスプロバイダに許可を受けてアクセストークンと交換し、初めて認可されます。今回は空の状態にしてください。
  • OAuth Token Secret: トークンシークレット。正式なOAuthでトークンの交換に必要になります。今回は空の状態にしてください。
  • OAuth TimeStamp: TimeStamp。UNIXタイムで現在時刻を入力します。今回は空の状態にしてください。
  • OAuth Nonce: Nonce。何でもよいですが、毎回必ず違う値を送る必要があります。今回は空の状態にしてください。
  • Signature Method: 署名方式。HMAC-SHA1を選択。
  • Version: OAuthのバージョン。1.0とします。
  • OAuth Mode: OAuthモード。Authorization Headerとしてください。
  • Query options: OAuth Toolの使い方。Generate URI and Submitとしてください。

これでOK。executeをクリックします。

Response Bodyにどんな表示が返ってきたでしょうか。自分の友達リストが返ってきていれば成功です。Resource URLの最後に”.json”を付け加えると、結果をJSON形式にすることもできます。

まとめ

実はこのやり方のOAuthは、外部サーバーからコンテナであるMySpaceに対してリクエストを投げる場合だけでなく、OpenSocialのmakeRequestで、コンテナのプロキシを介して外部サーバーに送られるリクエストでも同じやり方が利用されます。その際は当然、自分で用意するサーバーの受け口がOAuthをサポートしている必要があります。

気になるのは、やはりトークンの交換や、サービスプロバイダ側に認証を行わせる部分が省かれていること。OpenSocialとOAuthは非常に相性が良いと思っていたのですが、認証が出来ないとなると、サービスプロバイダが持つUserIDとコンテナのUserIDを紐付けたりといったことができないことになります。僕が仕様を勘違いしているだけなのか、今後OAuthにもちゃんと対応して行くのか。

makeRequestを使った外部サーバーとのデータ交換については、また別の機会に解説します。

※API(OAuth Tool?)が不安定なようで、お昼はうまくいったのにこの記事を書いている時点では、なぜかNot Foundが返ってきてしまいました・・・

3 月 23 2008

MySpaceのRESTful APIは独自仕様

Published by えーじ under OpenSocial

去る3月13日、MySpaceでOpenSocialアプリがβ版として一般公開されました。OpenSocial対応SNSとしては、一般公開は一番乗りです。まだOpenSocialの仕様も完全に固まっていない状況で、なぜ?どうやって?

OpenSocial Container standard fragmentation - Implementing OpenSocial Containers | Google グループ

内容を要約すると

MySpaceのOpenSocial APIは、JavaScriptの拡張もRESTful APIも独自仕様のようです。このままでは、標準仕様よりも、世界最大のSNSが作った仕様に合わせざるを得なくなるのではないでしょうか?

という投げかけに対し、これはOfficeのXML標準仕様問題だとか、ブラウザの標準仕様問題だとかって議論になってますが、21日の時点で、hi5の開発者の方から下記の通り返信が。

我々はこの問題について認識しており、解決したいと思っています。来週話し合いが持たれることになりましたが、この話し合いはMySpaceから提案されたものであり、 彼らもこの問題は認識しているはずです。我々もテンプレートシステムやプレゼンス等の提案を用意しています。

とのこと。

OpenSocialの仕様を固める主体は、どうやらGoogleだけではなく、hi5やMySpace, Ning等、Facebook以外の米国の主要SNSの開発者が集まり、提案を出し合って決めている模様。

バージョン0.7で(少なくともJavaScript APIは)ある程度落ち着いたという認識でいましたが、まだまだ変化がありそう。

(自分も含めて) 日本の開発者からも提案していった方がよいかもしれませんね。

3 月 19 2008

OpenSocialのRESTful API仕様(ドラフト)を翻訳しました

Published by えーじ under OpenSocial

こちらでGoogleの方が出しているプロポーザルの内容を翻訳しました。

OpenSocial/RESTful API Proposal - Tender Surrender

スピード重視でやったので間違い等多々あると思いますが、気付いたらぜひ教えてください。

3 月 17 2008

OpenSocialのRESTful API

Published by えーじ under OpenSocial

A modest proposal for an OpenSocial RESTful API - OpenSocial and Gadgets Specification Discussion | Google グループ

OpenSocial RESTful APIの最初のProposalだそうです。