飴屋

mixiアプリ/日記14

プラットフォーム共通化に伴う変更について

mixiが、韓国、中国、ドイツの代表的なSNSとの相互サービス提携を開始というニュースが以前流れました。facebookというとんでもないプラットフォームから既存の顧客を守るための協力体制なんだろうなと私は勝手に考えています。そんな体制作りの一環としてなのか何なのか、「mixiアプリでこれまで利用されてきたユーザIDの仕様を変更するので、サービスプロバイダさんはよろしく〜」という通知がシレッとやってきました。これがとんでもない仕様変更だとすぐに気がついた方もたくさんいらっしゃったことかと思います。アプリで利用するデータベースを設計するときに、データを表す一意な数値(文字)にこのユーザIDを利用していたケースが多かったであろうことは火を見るよりも明らかです。そんなIDをたよりにアプリで必要なデータを探していたわけですから、IDが変更されたら必要なデータが探せなくなるという結果が生じることになります。わかりやすくいうと、ゲーム内で得たお金や経験値のような数字をIDを元にひっぱりだせなくなるので、無一文の未経験状態でゲームを最初からやり直すような事態が発生します。

私の公開しているmixiアプリのうち一つは何かを育てたり、アイテムを売買したりするようなタイプのゲームではなかったので、IDの様式が変わったところで何ら影響はなかったのですが、もう一つはまさしくそんなタイプのゲームだったので対応を余儀なくされました。以下に、その対応の過程を書いていこうと思います。

あっ、そうそうこの件とは直接関係ないのですが、アルバムAPIにおける画像URLの変更があったようで、今回のID仕様変更を契機に気がついて修正したりもしました。地味にいろいろ変更があるのでこわいこわい。

Person & Friends APIの移行期間

さすがにmixiさんもIDの仕様変更が、サービスプロバイダ(アプリ提供者)にとって負担になると考えたらしく、新旧IDの移行期間に2011年3月上旬〜10月末までというおよそ9カ月の猶予を用意してくれました。具体的な移行スケジュールは3月から新旧IDを変換するAPIを提供、6月末(29日でした)に新旧IDの併用期間開始、10月末に新IDに完全移行という流れです。先日、新旧IDの併用期間がやっと開始したので、実際に新IDを使ってみることができるようになりました。これを受けて、私の重い腰が動き出した次第です。

併用期間開始後、試しに新しいアプリを作成してIDを取得するAPIを叩いてみたところ、確かに13文字の新方式のIDが取得できました。なるほど、これから作成されるアプリには旧IDが入る余地が最初からないわけですね。

もう一つ、ID変更の影響をほとんど受けないであろう片方のアプリを、Developer Dashboard(アプリの管理画面)から、新ID方式に変更してみました。するときちんとIDの仕様が変更されても変わらず動作することが確認できました。シンプルなアプリはメンテもシンプルでいいなと思いました。

では、今回の最大の難所になるであろう部分にとりかかるとしましょうか。既に新旧IDを変換するためのAPIはリリースされており、またその利用許諾もとりつけてあります。実際にどのようにIDを変換すればよいのでしょうか。・・・RESTful APIの利用必須ですと!?

RESTful API

RESTful APIはOpenSocialのデータをREST方式で扱うためのAPIです。mixiアプリのようなWEBサービスにおいてはクライアントサイド(ブラウザ)とサーバサイドでデータを交換する方式に一定のルールを設けておくと、他のサービスとの連携がものすごく簡便になります。また、データの交換経路をセキュアにしてユーザがブラウザ上でアプリを改ざんして意図しないデータを送信するのを防ぐ役割を持っていたりもします。そんな規格の一つとしてOpenSocial RESTful APIが採択されたようです。

http://developer.mixi.co.jp/appli/spec/pc/restful-api-for-pc/restful-api-details/

RESTful APIのPC版アプリでの利用に関しては上記のURLに詳細が掲載されています。簡単に眺めてみると、取得すべき必要な情報がURLに化体されていることがみてとれます。

http://api.mixi-platform.com/os/0.8/people/@me/@friends

こんな感じのURLがサンプルに掲示されていますが、これを分解すると・・・

http://api.mixi-platform.com/os/0.8このサーバー(エンドポイント)に要求します
/peoplePerson & Friend APIを使って
/@me自分に関する
/@friends友達に関する情報を

となります。今回、新旧のID変換APIが追加されたことによって、取得するフィールドに「platformUserId」という新方式IDを表すものを指定できるようになったそうです。旧IDを元に新IDを引っ張ってくるのもこれでできそうです。

RESTful API は単純にリソースを表すURLにアクセスすればよいという性質ではなく、これをOAuthの仕様にのっとって暗号化してアクセスを行います。

Date:2011/7/2

OAuth

OAuthはtwitterの認証手段としてよくしられていると思います。twitterのクライアントを作る場合は、ユーザとtwitterサービスの間にクライアントが入ることになるため、ユーザの操作を代理でtwitterサービスに反映させる権限が必要になります。しかし、twitterのようなIDとパスワードで認証するサービスは、第三者たるクライアントに簡単にIDとパスワードの情報を渡すわけにはいきません。クライアントに悪意がないかを確かめることが難しいからですね。なので、最低限の権限を一時的に委譲するような仕組み、かつ権限をいつでもクライアントから取り上げられるような仕組みが必要となって生まれたのがOAuthに代表される認証方式です。

http://developer.mixi.co.jp/appli/spec/mob/2-legged-oauth/

mixiアプリで使われる認証方式は2-legged OAuthというタイプのもので、mixiアプリの提供者(サービスプロバイダ)とmixi(プラットフォーム)間で認証が行われます。一般ユーザの情報がアプリに利用されることはアプリの使用開始時に許諾されているとみなされているので、改めて一般ユーザに何かをしてもらう必要がないというタイプの認証方式になります。

OAuthでは、認証の正当性を担保するために、各アプリに設定されている秘密鍵や、日時、ランダムな文字列などを使って暗号化を行うようです。何だか仰々しくなってきました。具体的にどうやって実装すれば、新旧IDを変換できるのでしょうか?

長くなったので次の日記を実践編としてみました。

Date:2011/7/3

日記一覧

Last-Modified