<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tender Surrender &#187; RESTful API</title>
	<atom:link href="http://devlog.agektmr.com/en/archives/tag/restful-api/feed" rel="self" type="application/rss+xml" />
	<link>http://devlog.agektmr.com</link>
	<description>SocialWeb Evolves</description>
	<lastBuildDate>Mon, 05 Jul 2010 05:13:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>EN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>OpenSocial RESTful API Specificationを翻訳しました</title>
		<link>http://devlog.agektmr.com/en/archives/76</link>
		<comments>http://devlog.agektmr.com/en/archives/76#comments</comments>
		<pubDate>Mon, 16 Jun 2008 08:51:07 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/en/?p=76</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F76", "style": "big", "title":  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fen%252Farchives%252F76%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%20RESTful%20API%20Specification%E3%82%92%E7%BF%BB%E8%A8%B3%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F76", "style": "big", "title": "OpenSocial RESTful API Specificationを翻訳しました" });</script></div>
<p>これまで公開していたOpenSocial RESTful API Proposalの翻訳を、OpenSocial v0.8仕様のリリースで公開された<a href="http://devlog.agektmr.com/wiki/index.php?cmd=read&amp;page=OpenSocial%2FRESTful%20API%20Specification" target="_blank">OpenSocial RESTful API Specification</a>に置き換えました。</p>
<p>ただし部分更新処理の項目についてはTBD(To Be Determined)のままになっています。問い合わせしているので、最新版に更新され次第アップします。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/en/archives/76/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySpaceのRESTful APIでOAuth認証を試してみる</title>
		<link>http://devlog.agektmr.com/en/archives/42</link>
		<comments>http://devlog.agektmr.com/en/archives/42#comments</comments>
		<pubDate>Fri, 18 Apr 2008 17:48:06 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OAuth]]></category>
		<category><![CDATA[MySpace]]></category>
		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/en/?p=42</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F42", "style": "big", "title":  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fen%252Farchives%252F42%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22MySpace%E3%81%AERESTful%20API%E3%81%A7OAuth%E8%AA%8D%E8%A8%BC%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F42", "style": "big", "title": "MySpaceのRESTful APIでOAuth認証を試してみる" });</script></div>
<p>MySpaceで公開されているMDP(MySpace Developer Platform)には、OpenSocialだけでなく独自のRESTful APIも含まれており、これを使うことでサーバーサイドにアプリケーションを作ることもできるようになっています。今回は、MDPのRESTful APIのOAuth認証にフォーカスを当ててみます。</p>
<h2>OpenSocial/MDPのOAuthについて</h2>
<p>OAuthとは、ユーザーとユーザーが利用したいサービス(以後サービスプロバイダ)を仲介するOpenSocial等のコンテナ(以後コンシューマ)が、サービスプロバイダの認証情報を知ることなくAPIを操ることを可能にする、認可のためのプロトコルです。</p>
<p>例えばユーザーがコンシューマ上でサービスプロバイダのアプリを利用しようとすると、サービスプロバイダのドメイン上にある認証画面にリダイレクトされ、ユーザーが許可をし、そこではじめて、コンシューマがサービスプロバイダのAPIを利用可能になる、という使い方が想定されています。</p>
<p>しかし、現在のところOpenSocialで規定されているOAuthはフルスペックではありません。ユーザーがサービスプロバイダの認証画面にリダイレクトされたり、コンシューマとサービスプロバイダがトークンを交換したりといった仕様は想定されていないのです。</p>
<p>これはOpenSocialガジェットがJavaScriptで動作しているためトークンを管理できない、等の理由があるようですが、MySpace独自のRESTful APIでも条件は同じようで、コンシューマキーとコンシューマシークレットがあれば、トークンなしでOAuth認証を行うことができます。</p>
<p>※OAuthの詳しい仕様に関しては<a href="http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html" target="_blank">この辺り</a>を参考にしてください。</p>
<h2>アプリケーションプロフィールを作る</h2>
<p>まずはMySpaceでアプリケーションを作る準備をします。</p>
<p>MySpaceでアプリケーションを作るためには、ユーザーアカウントとアプリケーションのプロフィールアカウントが必要です。下記のサイトにスクリーンショット付きで解説がありますので、参考にしてください。</p>
<p><a href="http://d.hatena.ne.jp/yorihito_tanaka/20080408" target="_blank">MySpaceアプリケーションを作ろう &#8211; ラーニング人生。</a></p>
<h2>OAuth認証の準備</h2>
<p>アプリケーションプロフィールが作れたら、XMLやJavaScriptのコードは不要です。今回の目的はRESTful APIの認証を試すところにありますので、画面左の<a href="http://developer.myspace.com/modules/apps/pages/myapps.aspx" target="_blank">My Apps</a>をクリックし、作成したアプリケーションプロフィールのEdit Detailsをクリックしてください。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_myapps.jpg"><img class="alignnone size-medium wp-image-43" title="myspace_myapps" src="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_myapps-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>画面下部にOAuth Consumer KeyとOAuth Consumer Secretという部分があります。RESTful APIにアクセスするには、これらが必要になりますので、メモ帳などにコピペしておいてください。OAuth Consumer Keyは任意に変更できますので、変更してもよいかもしれません(保存は忘れずに)。 </p>
<p><span style="color: #0000ee; text-decoration: underline;"><a href="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_myapp_detail.jpg"></a><a href="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_myapp_detail.jpg"><img class="alignnone size-full wp-image-44" title="myspace_myapp_detail" src="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_myapp_detail.jpg" alt="" width="499" height="49" /></a></span></p>
<h2>OAuth Toolで認証してみる</h2>
<p>OAuthではコンシューマキーとNonce、Timestampなどから署名(Signature)を作って認証を行います。署名の作り方は複雑なので、今回はMDPで提供されている<a href="http://developer.myspace.com/modules/apis/pages/oauthtool.aspx" target="_blank">OAuth Tool</a>を使って試してみます。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_oauthtool.jpg"><img class="alignnone size-medium wp-image-45" title="myspace_oauthtool" src="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_oauthtool-300x209.jpg" alt="" width="300" height="209" /></a></p>
<p>画面右にある項目を埋めていきます。</p>
<ul>
<li><strong>Server:</strong> サーバーURL。RFC3986で言うschemeとauthorityに当たります。ここではhttp://api.myspace.comとします。</li>
<li><strong>ResourceURL:</strong> サーバーURL以降のパス。RFC3986で言うpathに当たります。queryとfragmentは含みません。ここは/users/{user_id}/friendsとして、user_idにはあなたのユーザーIDを入力してください。他の利用可能なエンドポイントは<a href="http://developer.myspace.com/community/RestfulAPIs/resources.aspx" target="_blank">ここ</a>に記載されています。</li>
<li><strong>Request Method:</strong> HTTPメソッド。GETとします。</li>
<li><strong>Consumer Key:</strong> OAuthのコンシューマキー。先程メモったConsumer Keyを入力してください。</li>
<li><strong>Consumer Secret:</strong> OAuthのコンシューマシークレット。先程メモったConsumer Keyを入力してください。</li>
<li><strong>OAuth Token:</strong> トークン。正式なOAuthではサービスプロバイダに許可を受けてアクセストークンと交換し、初めて認可されます。今回は空の状態にしてください。</li>
<li><strong>OAuth Token Secret:</strong> トークンシークレット。正式なOAuthでトークンの交換に必要になります。今回は空の状態にしてください。</li>
<li><strong><span style="font-weight: normal;"><strong>OAuth TimeStamp:</strong> TimeStamp。UNIXタイムで現在時刻を入力します。今回は空の状態にしてください。</span></strong></li>
<li><strong><span style="font-weight: normal;"><strong>OAuth Nonce:</strong> Nonce。何でもよいですが、毎回必ず違う値を送る必要があります。今回は空の状態にしてください。</span></strong></li>
<li><strong>Signature Method:</strong> 署名方式。HMAC-SHA1を選択。</li>
<li><strong>Version:</strong> OAuthのバージョン。1.0とします。</li>
<li><strong>OAuth Mode:</strong> OAuthモード。Authorization Headerとしてください。</li>
<li><strong>Query options:</strong> OAuth Toolの使い方。Generate URI and Submitとしてください。</li>
</ul>
<p><img class="alignnone size-full wp-image-46" title="myspace_oauthtool_detail" src="http://devlog.agektmr.com/wp-content/uploads/2008/04/myspace_oauthtool_detail.jpg" alt="" width="203" height="424" /></p>
<p>これでOK。executeをクリックします。</p>
<p>Response Bodyにどんな表示が返ってきたでしょうか。自分の友達リストが返ってきていれば成功です。Resource URLの最後に&#8221;.json&#8221;を付け加えると、結果をJSON形式にすることもできます。</p>
<h2>まとめ</h2>
<p>実はこのやり方のOAuthは、外部サーバーからコンテナであるMySpaceに対してリクエストを投げる場合だけでなく、OpenSocialのmakeRequestで、コンテナのプロキシを介して外部サーバーに送られるリクエストでも同じやり方が利用されます。その際は当然、自分で用意するサーバーの受け口がOAuthをサポートしている必要があります。</p>
<p>気になるのは、やはりトークンの交換や、サービスプロバイダ側に認証を行わせる部分が省かれていること。OpenSocialとOAuthは非常に相性が良いと思っていたのですが、認証が出来ないとなると、サービスプロバイダが持つUserIDとコンテナのUserIDを紐付けたりといったことができないことになります。僕が仕様を勘違いしているだけなのか、今後OAuthにもちゃんと対応して行くのか。</p>
<p>makeRequestを使った外部サーバーとのデータ交換については、また別の機会に解説します。</p>
<p>※API(OAuth Tool?)が不安定なようで、お昼はうまくいったのにこの記事を書いている時点では、なぜかNot Foundが返ってきてしまいました・・・</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/en/archives/42/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySpaceのRESTful APIは独自仕様</title>
		<link>http://devlog.agektmr.com/en/archives/20</link>
		<comments>http://devlog.agektmr.com/en/archives/20#comments</comments>
		<pubDate>Sat, 22 Mar 2008 17:09:04 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/en/archives/20</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F20", "style": "big", "title":  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fen%252Farchives%252F20%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22MySpace%E3%81%AERESTful%20API%E3%81%AF%E7%8B%AC%E8%87%AA%E4%BB%95%E6%A7%98%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F20", "style": "big", "title": "MySpaceのRESTful APIは独自仕様" });</script></div>
<p>去る3月13日、MySpaceでOpenSocialアプリがβ版として一般公開されました。OpenSocial対応SNSとしては、一般公開は一番乗りです。まだOpenSocialの仕様も完全に固まっていない状況で、なぜ？どうやって？</p>
<p><a href="http://groups.google.com/group/opensocial-container/browse_thread/thread/96761d3ebd53e32c/646c972cddae2d35" target="_blank">OpenSocial Container standard fragmentation &#8211; Implementing OpenSocial Containers | Google グループ</a></p>
<p>内容を要約すると</p>
<blockquote><p>MySpaceのOpenSocial APIは、JavaScriptの拡張もRESTful APIも独自仕様のようです。このままでは、標準仕様よりも、世界最大のSNSが作った仕様に合わせざるを得なくなるのではないでしょうか？</p></blockquote>
<p>という投げかけに対し、これはOfficeのXML標準仕様問題だとか、ブラウザの標準仕様問題だとかって議論になってますが、21日の時点で、hi5の開発者の方から下記の通り返信が。</p>
<blockquote><p>我々はこの問題について認識しており、解決したいと思っています。来週話し合いが持たれることになりましたが、この話し合いはMySpaceから提案されたものであり、 彼らもこの問題は認識しているはずです。我々もテンプレートシステムやプレゼンス等の提案を用意しています。</p></blockquote>
<p>とのこと。</p>
<p>OpenSocialの仕様を固める主体は、どうやらGoogleだけではなく、hi5やMySpace, Ning等、Facebook以外の米国の主要SNSの開発者が集まり、提案を出し合って決めている模様。</p>
<blockquote></blockquote>
<p>バージョン0.7で(少なくともJavaScript APIは)ある程度落ち着いたという認識でいましたが、まだまだ変化がありそう。</p>
<p>(自分も含めて) 日本の開発者からも提案していった方がよいかもしれませんね。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/en/archives/20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenSocialのRESTful API仕様(ドラフト)を翻訳しました</title>
		<link>http://devlog.agektmr.com/en/archives/19</link>
		<comments>http://devlog.agektmr.com/en/archives/19#comments</comments>
		<pubDate>Wed, 19 Mar 2008 06:50:00 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/en/archives/19</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F19", "style": "big", "title":  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fen%252Farchives%252F19%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%E3%81%AERESTful%20API%E4%BB%95%E6%A7%98%28%E3%83%89%E3%83%A9%E3%83%95%E3%83%88%29%E3%82%92%E7%BF%BB%E8%A8%B3%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F19", "style": "big", "title": "OpenSocialのRESTful API仕様(ドラフト)を翻訳しました" });</script></div>
<p><a href="http://groups.google.com/group/opensocial-and-gadgets-spec/msg/87df6973a9f94fe1?" target="_blank">こちらで</a>Googleの方が出しているプロポーザルの内容を翻訳しました。</p>
<p><a href="http://devlog.agektmr.com/wiki/index.php?OpenSocial%2FRESTful%20API%20Proposal" target="_blank">OpenSocial/RESTful API Proposal &#8211; Tender Surrender</a></p>
<p>スピード重視でやったので間違い等多々あると思いますが、気付いたらぜひ教えてください。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/en/archives/19/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenSocialのRESTful API</title>
		<link>http://devlog.agektmr.com/en/archives/15</link>
		<comments>http://devlog.agektmr.com/en/archives/15#comments</comments>
		<pubDate>Mon, 17 Mar 2008 10:46:13 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/en/archives/15</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F15", "style": "big", "title": "OpenSocialのRESTful API" });
A modest proposal for an OpenSocial RESTful API &#8211; OpenSocial and Gadgets Specification Discussion &#124; Google グループ
OpenSocial RESTful APIの最初のProposalだそうです。

]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fen%252Farchives%252F15%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%E3%81%AERESTful%20API%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fen%2Farchives%2F15", "style": "big", "title": "OpenSocialのRESTful API" });</script></div>
<p><a href="http://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/f5a0cf3707709ffa" target="_blank">A modest proposal for an OpenSocial RESTful API &#8211; OpenSocial and Gadgets Specification Discussion | Google グループ</a></p>
<p><a href="http://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/f5a0cf3707709ffa" target="_blank"></a>OpenSocial RESTful APIの最初のProposalだそうです。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/en/archives/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
