<?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>きのこる庭 &#187; 勉強会・イベント</title>
	<atom:link href="http://kinokoru.jp/archives/category/%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%83%bb%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88/feed" rel="self" type="application/rss+xml" />
	<link>http://kinokoru.jp</link>
	<description></description>
	<lastBuildDate>Wed, 09 Jan 2019 03:18:33 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>テスト駆動開発のハンズオンイベント「ミニTDDBC」に参加してきた</title>
		<link>http://kinokoru.jp/archives/324</link>
		<comments>http://kinokoru.jp/archives/324#comments</comments>
		<pubDate>Sun, 30 Mar 2014 11:04:27 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[勉強会・イベント]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[テスト駆動開発]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=324</guid>
		<description><![CDATA[<p>以前CI関連の勉強会でその存在を知ってから密かに思いを寄せていたTDDBC。 今回はそのTDDBCがYokohama Devtesting と合同でイベントを開催されるということだったので、 こちらのイベントに参加してき [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/324">テスト駆動開発のハンズオンイベント「ミニTDDBC」に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>以前CI関連の勉強会でその存在を知ってから密かに思いを寄せていたTDDBC。</p>
<p>今回はそのTDDBCがYokohama Devtesting と合同でイベントを開催されるということだったので、<br />
こちらのイベントに参加してきました。</p>
<h2>TDDBCとは？</h2>
<p>TDDを手を動かしながら体験することを目的として、全国各地にてハンズオンイベントを開催しているコミュニティ。<br />
<strong>アジャイルとかCIのイベントに参加してるけど、結局何を契機に始めたらいいのかわかんないや みたいな方のためのイベント</strong>も。<br />
言語はイベントによって異なる模様(<strong>今回はJava</strong>)。</p>
<h2>Yokohama Devtesting とは？</h2>
<p>横浜でソフトウェア開発のテストについて考えるコミュニティ。<br />
<strong>月一回のペースにてテスト駆動開発本の読書会も開催されている</strong>模様。</p>
<h2>イベントの流れ</h2>
<p>・TDDに関するプレゼン<br />
・ペアプロデモ<br />
・実際にペアプロ<br />
・コードレビュー</p>
<p><span id="more-324"></span></p>
<h2>TDDに関するプレゼン</h2>
<p>以下、<strong>TDDに関するメモ</strong>。</p>
<h3>● TDDのゴール</h3>
<p>「動作するきれいなコード」</p>
<h3>● TDDのこころ</h3>
<p>・小さくまわす<br />
・TODOリストに入れて いっこいっこつぶして行く<br />
・複数を相手にしない</p>
<h3>● TDD三原則</h3>
<p>・失敗する単体テストのコードを書く前に製品のコードを書いてはならない<br />
・コンパイルが通り適切に失敗する単体テストができるまでは次の単体テストを書いてはならない<br />
・現在失敗している単体テストが通るまで次の製品コードを書いてはならない。</p>
<h3>● 用語集</h3>
<p><strong>・TODOリスト</strong><br />
最終的にめざすゴールと一つ一つのゴール<br />
<strong>・アサートファースト</strong><br />
テストをどこから書く？<br />
→ コードによって何を実現したいかをアサーションとして書く。<br />
<strong>・仮実装</strong><br />
→ まず最初にやるテスト。<br />
とりあえずテストを成功させる。<br />
テストをテストする意味合いを持っている。<br />
<strong>・三角測量</strong><br />
二つの側面からテストにより一つの実装を導く<br />
<strong>・明白な実装</strong></p>
<p>ーーー</p>
<p><strong>ペアプロに関するメモ</strong>。</p>
<p>● ペア・チームにて「これは実装しないと駄目だよね」みたいな感じで 設計を含めて合意</p>
<p>● 紙・メモ帳(TODOリスト)に出しておく<br />
ペアプロでよくあること「交代」。適切なタイミング(イテレーションが終わった時とか、詰まった時とか)で交代しよう。<br />
実際に書いていく人 &#8211; <strong>ドライバ</strong><br />
アドバイスする人 &#8211; <strong>ナビゲータ</strong></p>
<h2>ペアプロデモ</h2>
<p>「百聞は一見にしかず」ということで、<br />
今回はFizzBuzzをお題に主催の方のうち2人がプロジェクタにペアプロの様子を映しながら開発。</p>
<p>「TODOリストを見てみましょうか」<br />
「何からはじめる？」<br />
「仮実装」<br />
「テストを実行」<br />
「コンパイルを通ることを確認」<br />
「別のケース。エラーになりました」<br />
「テストが通るようにプロダクトコードを修正」<br />
「OK」<br />
「んー、単純なんでリファクタリングする必要もなさそうですね」<br />
「次のTODOにうつりますか」<br />
「ここでナビゲータ交代」<br />
「なんかここプライベート変数に置き換えた方よさそうですね」<br />
「TODOに追加しておきましょう」</p>
<p>という感じのやり取りが続く。<br />
うーん、こういう感じでやるのか…勉強になる。</p>
<h2>実際にペアプロ</h2>
<p>参加者で2人組になってペアプロを実際にやってみる。<br />
結構な量の課題が小分けに出題されていて、<br />
それをTDDで出来る所まで実際にペアプロで開発していくというスタイル。</p>
<p>ハンズオンの時間は1時間30分。<br />
これがかなり楽しくて、もっとやりたかったなーという感じ。<br />
何はともあれ、おかげでTDDのプロセスがようやく腑に落ちた感じ。</p>
<h2>コードレビュー</h2>
<p>書くだけで終わりじゃなくて、実際に全員の前でコードレビュー。<br />
どのようなプロセスで課題に取り組んだか、どこで詰まったか等の説明とともに ペアプロで書いたコードの発表。<br />
Javaだったらprivate関数の頭にアンスコ付ける必要あんまないよーとか<br />
そこプリミティブ型の方がいいよーとか<br />
そこチェック例外書かなくても大丈夫だよーとか<br />
色々ご指摘を頂いて沢山勉強させていただきました。</p>
<h2>その後</h2>
<p>すっかり触発されて、高くて買うのに悩んでいたTDD本を買ってしまった。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2014/03/tddvib1.jpg"><img class="aligncenter size-full wp-image-326" alt="tddvib" src="http://kinokoru.jp/wp-content/uploads/2014/03/tddvib1.jpg" width="207" height="369" /></a><br />
ついでに「act_as_professional」と書かれた TDDのグリーンバンドもゲットしてきた。<br />
(* グリーンバンドは TDD関連の偉い人がテスト辛くなった時に「でも俺プロだろ！」って自分を戒めるためのバンドらしいです)</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2014/03/greenband.jpg"><img class="aligncenter size-full wp-image-327" alt="greenband" src="http://kinokoru.jp/wp-content/uploads/2014/03/greenband.jpg" width="166" height="296" /></a><br />
やったぜ＼(^o^)／</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/324">テスト駆動開発のハンズオンイベント「ミニTDDBC」に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raspberry Pi ではじめてのLチカ体験 &amp; 温度計制作</title>
		<link>http://kinokoru.jp/archives/167</link>
		<comments>http://kinokoru.jp/archives/167#comments</comments>
		<pubDate>Sun, 01 Dec 2013 12:53:59 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[勉強会・イベント]]></category>
		<category><![CDATA[電子工作]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=167</guid>
		<description><![CDATA[<p>「Tokyo Hacker Space」という乃木坂にあるハッカースペースでRaspberry Piをいじってきました。 Tokyo Hacker Space? 東京にあるものづくりのためのコミュニティ。 ホームページ見 [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/167">Raspberry Pi ではじめてのLチカ体験 &#038; 温度計制作</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>「Tokyo Hacker Space」という乃木坂にあるハッカースペースでRaspberry Piをいじってきました。</p>
<h2>Tokyo Hacker Space?</h2>
<p>東京にあるものづくりのためのコミュニティ。</p>
<p><a href="http://www.tokyohackerspace.org/ja" target="_blank">ホームページ</a>見てると結構ハード寄りのことしてるみたい。</p>
<p>参加には月会費が必要だけど、月に何回か一般向けにもイベント開催してるっぽい。</p>
<p>コミュニティスペース自体も工具とかいっぱい並んでるガレージみたいな感じでものづくり精神がかき立てられる。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/1.jpg"><img class="aligncenter size-medium wp-image-168" alt="1" src="http://kinokoru.jp/wp-content/uploads/2013/12/1-300x168.jpg" width="300" height="168" /></a></p>
<h2>というわけで人生初のハードを体験。</h2>
<p>これがRaspberry Pi本体。Ethernet端子やらUSB端子やらイヤホンジャックやらHDMI端子やら色々ついてる。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/3.jpg"><img class="aligncenter size-medium wp-image-169" alt="3" src="http://kinokoru.jp/wp-content/uploads/2013/12/3-300x168.jpg" width="300" height="168" /></a></p>
<p>ワークショップでは8GBのSDカードを挿して「Raspbian」というDebianベースのOSを使用。</p>
<p>IPアドレス経由で、MacからSSHでログイン。GUIもサポートされており、「オーバークロック」やら「ロケール」やら「カメラとの連携」やら色々設定可。</p>
<h2>Lチカしてみた。</h2>
<p><strong>Lチカ</strong>… LEDをチカっと光らせるハード界のド定番らしい。プログラミング言語で言う「Hello World」みたいな感じ。</p>
<p>「ブレッドボード」と呼ばれるものにLEDと電気抵抗を挿して、Raspberry Pi本体と接続。</p>
<p>(この時配線を間違えるとヘタすればショートするらしい。例えば 3.3V用のLEDを5Vのジャックに繋げちゃうと死ぬとか )</p>
<p><span id="more-167"></span></p>
<p>光らせる時は以下のようにササッとシェルで命令を渡す( 何回か引数指定間違えてエラー出してるのは内緒 )。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/5.jpg"><img class="aligncenter size-medium wp-image-171" alt="5" src="http://kinokoru.jp/wp-content/uploads/2013/12/5-300x168.jpg" width="300" height="168" /></a></p>
<p>gpio/value を &#8220;1&#8243;にすると、</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/4.jpg"><img class="aligncenter size-medium wp-image-170" alt="4" src="http://kinokoru.jp/wp-content/uploads/2013/12/4-300x168.jpg" width="300" height="168" /></a></p>
<p>チカッ。</p>
<h3>うおーーー！！！！！！</h3>
<p>感動。</p>
<p>因みに連続した命令を書く事も可能で、ちょっと繰り返し構文とかを書いてあげるだけで、5回連続で1秒おきにつけたり消したりとかもしてくれる。書いたコードが即座にハードに伝わるのは何とも言えない喜びがある。</p>
<p>因みに、シェルだけじゃなくてPythonでも操作できる。</p>
<h2>次は温度計つくるよ。</h2>
<p>今度は「バックライト付ディスプレイ」と「温度計測機」を用意。</p>
<p>これらはジャックと接続するために接続部分を「はんだづけ」。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/6.jpg"><img class="aligncenter size-medium wp-image-172" alt="6" src="http://kinokoru.jp/wp-content/uploads/2013/12/6-300x168.jpg" width="300" height="168" /></a></p>
<p>はんだごてなんていじったの、中学校でジャージ溶かして以来だな！ちょっと自信無いながらもうまくはんだづけできました。</p>
<p>実際にはんだづけが終わって ディスプレイと温度計測機をブレッドボードに装着し、本体と接続したものがこちら。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/7.jpg"><img class="aligncenter size-medium wp-image-173" alt="7" src="http://kinokoru.jp/wp-content/uploads/2013/12/7-300x168.jpg" width="300" height="168" /></a></p>
<p>配線が結構ややこしかった！接続ポートごとに役割が決まってるから、間違ってるとうまく動かない。</p>
<p>そんなわけで接続完了して シェルを叩くと…</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/12/8.jpg"><img class="aligncenter size-medium wp-image-174" alt="8" src="http://kinokoru.jp/wp-content/uploads/2013/12/8-168x300.jpg" width="168" height="300" /></a></p>
<p>よっしゃあ！うまくできたみたいです。</p>
<p>今回でハードのいじり方の基礎の基礎を何となく理解できたので、今後も色んなデバイスと接続したりして遊んでみます。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/167">Raspberry Pi ではじめてのLチカ体験 &#038; 温度計制作</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/167/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTful Web APIs 読書会( 第三回 )に参加してきた</title>
		<link>http://kinokoru.jp/archives/137</link>
		<comments>http://kinokoru.jp/archives/137#comments</comments>
		<pubDate>Thu, 14 Nov 2013 16:03:56 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[勉強会・イベント]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=137</guid>
		<description><![CDATA[<p>久々の更新。しばらくRailsで趣味の開発に没頭しておりました。 というわけで 今回はRESTful Web APIs読書会(第三回)の参加報告を。 今回は主に「リソースの定義」と「HTTPリクエストの種類」と「安全性・ [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/137">RESTful Web APIs 読書会( 第三回 )に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>久々の更新。しばらくRailsで趣味の開発に没頭しておりました。</p>
<p>というわけで 今回はRESTful Web APIs読書会(第三回)の参加報告を。</p>
<p>今回は主に「<strong>リソースの定義</strong>」と「<strong>HTTPリクエストの種類</strong>」と「<strong>安全性・べき等性</strong>」のお話。</p>
<h2>・リソースの定義</h2>
<p>リソースというと結構個人的に定義が曖昧で、データベースのデータとかがメインになるのかなと思っていたけど、どうやらRESTにおいて <strong>URIで表現されるものは全てリソースになる</strong>らしい。</p>
<p>そして<strong>リソースの状態</strong>は以下の二つによって表現されうるらしい。</p>
<p>( <strong>2013年12月1日改正、コメントより「リソースが（同じ状態で）複数の表現を持つ場合に、クライアントは望む表現をどのように指定するか、の選択肢である」といただきました。必ずしも二つではないということですね</strong> )</p>
<p>1. <strong>Content negotiation</strong>( 「内容ネゴシエーション」とも。HTTPリクエストとレスポンスから成るクライアントサーバ間のやり取り？ )<br />
2. <strong>URI</strong>( Railsで言うと new とか edit とかでURIが分かれてるイメージ？ )</p>
<p><span id="more-137"></span></p>
<h2>・HTTPリクエストの種類</h2>
<h3>・GET</h3>
<p>最も一般的なリクエスト。クライアントがリソースの何らかの表現を得るためのもの。</p>
<h3>・POST</h3>
<p>クライアントが新たにリソースを作成するためのもの。</p>
<p>実際、HTMLでは「GET」「POST」しかサポートしていなかったのもあって、これまでの世の中の一般的なWebサービスはPUTやらDELETEやら何でもかんでもPOSTでやってた風潮があった( 因みに そういう場合は「overloaded POST」というらしい )けど、著者は非推奨している。</p>
<h3>・PUT</h3>
<p>主に既存のリソースの更新に使用される。</p>
<p>リクエスト対象は <strong>PUT /some_resource/hogehoge</strong> みたいな感じに成る。</p>
<p>PUTでPOSTの役割(新しいリソースを作成する)を果たすこともできる。その場合、クライアントが リクエストを投げるURIをあらかじめ知っている必要がある。</p>
<p>実例を挙げるとするならばWikiみたいな感じ。「hogehoge」についての記事を書こうと ユーザがリクエストを投げた際、既にリソースがあれば更新、リソースが無ければ新たにリソースをつくる みたいなイメージ。</p>
<h3>・DELETE</h3>
<p>リソースの削除。</p>
<h3>・PATCH</h3>
<p>PUTに似ているが、diff(差分)を取って 変更のあった部分のみ更新。</p>
<p>その他 <strong>LINK / UNLINK</strong>、<strong>HEAD</strong>、<strong>OPTIONS</strong> 等々。重要なのは上記に挙げた5つ。</p>
<p>結局どのメソッドを使えば良いかは それぞれのAPI提供者を取り巻くコミュニティに依存すると言ってよい。HTMLに準拠するなら「GET/POST」しか使えないだろうし、Railsなら「GET/POST/PUT/DELETE」だろうし、ファイルシステムのGUIとか関わってくるなら上記に挙げた例意外にWebDAVとか入ってくるだろうし。</p>
<h2>・安全性、べき等性</h2>
<p><strong>・安全性</strong></p>
<p>リソースが増えたり書き変わったり消えたり、リソースそのものに影響があるかどうか。</p>
<p>RESTの設計原則に基づく場合、<strong>GET は 安全である</strong>( あるURIにGETでアクセスしたらいきなりデータ消えちゃった！みたいなことが無い…とかそんなイメージ )。</p>
<p><strong>・べき等性</strong></p>
<p>あるリクエストを送った時に、常に同じレスポンスを保証するかどうか。</p>
<p>( <strong>2013年12月1日改正、上記についてコメントより「 1回送っても複数回送ってもリソースの状態が同じであること」といただきました。レスポンスが常に同じではなくても良いみたいです</strong> )</p>
<p>GET, PUT, DELETE はべき等。</p>
<p>因みに、べき等性について は以下に示すように数学の計算から来ている概念だとか。</p>
<p>・DELETEの場合… ある数字に 0 をかけた場合、その後何回 0 をかけても 0 から変わらないというのと同じイメージで、あるリソースに対して一度DELETEリクエスト送ったらその後 レスポンスは 変わらない。</p>
<p>・GETの場合… ある数字に 何回 1をかけても最初の数値から変わらないというのと同じイメージで、あるリソースに対して何回GETリクエスト送っても返ってくるレスポンスは変わらない。</p>
<h2>・気になった点など</h2>
<p>Q.<strong>「複数条件で検索結果を絞る」みたいな実装</strong>をする場合に POSTを使ったりするけど、これってどうなんだろう</p>
<p>A. 上記で説明した<strong>overloaded POST</strong>にあたる。検索条件が長過ぎてGETじゃさばけない時にPOSTを使ったりとか。Googleの検索結果のURIみたいに一般的にはGETを使うらしい。</p>
<p>Q. 上記でGETを使う場合、RESTの特徴の一つである「シンプルなURI」の点でどうなんだろう</p>
<p>A. 「RESTful Web APIs」の著者が URIに関して 書籍ではあまり触れていない印象。URIに関してはそこまで重要視していない感じ？ なお、「RESTful Web Services」にもURI設計についての記載があるらしいのでそちらを参照すると良いかも。</p>
<h2>・頂いたもの</h2>
<p>オライリーのステッカー。JSでよく見かけるサイが左下に。飛び上がるほど嬉しかったです。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/11/1.jpg"><img class="aligncenter size-medium wp-image-142" alt="1" src="http://kinokoru.jp/wp-content/uploads/2013/11/1-300x168.jpg" width="300" height="168" /></a></p>
<p>DevOpsの小冊子。今読んでいるデザパタの本と並行して読ませていただきます。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/11/devops.jpg"><img class="aligncenter size-medium wp-image-143" alt="devops" src="http://kinokoru.jp/wp-content/uploads/2013/11/devops-300x168.jpg" width="300" height="168" /></a></p>
<p>そしてRESTful Web APIs。ドキドキが止まらない。</p>
<p><a href="http://kinokoru.jp/wp-content/uploads/2013/11/restful.jpg"><img class="aligncenter size-medium wp-image-144" alt="restful" src="http://kinokoru.jp/wp-content/uploads/2013/11/restful-168x300.jpg" width="168" height="300" /></a></p>
<p>今回もとても勉強になりました。</p>
<p>RESTやHTTPというと結構つかみ所の無い印象だったけれど、最近ようやくフレームを理解し始めた感じです。</p>
<p>そう考えると勉強会って 分からない部分や気になっている部分を参加者主体で共有したり議論したりできるからすごく良い機会だなって思いました。</p>
<p>次回の<a href="http://www.circleaf.com/groups/19">RESTful Web APIs 読書会</a>は 11/28(木) 19:30- 。今から楽しみです。</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/137">RESTful Web APIs 読書会( 第三回 )に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/137/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RESTful Web APIs 読書会( 第二回 )に参加してきた</title>
		<link>http://kinokoru.jp/archives/117</link>
		<comments>http://kinokoru.jp/archives/117#comments</comments>
		<pubDate>Thu, 24 Oct 2013 15:01:05 +0000</pubDate>
		<dc:creator>Nisei Kimura</dc:creator>
				<category><![CDATA[勉強会・イベント]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://kinokoru.jp/?p=117</guid>
		<description><![CDATA[<p>RESTful Web APIs 読書会 #2 に参加してきた。 RESTful Web API？ 要約すると以下のような感じ。 ・Webサービスだとハイパーリンクとかをたどって ユーザは目的達成できるけど、APIの場合 [...]</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/117">RESTful Web APIs 読書会( 第二回 )に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://kinokoru.jp/wp-content/uploads/2013/10/RESTful-Web-APIs.jpg"><img class="aligncenter size-medium wp-image-118" alt="RESTful-Web-APIs" src="http://kinokoru.jp/wp-content/uploads/2013/10/RESTful-Web-APIs-229x300.jpg" width="229" height="300" /></a></p>
<p><a title="RESTFul Web APIs" href="http://www.circleaf.com/events/41">RESTful Web APIs 読書会 #2</a> に参加してきた。</p>
<h2>RESTful Web API？</h2>
<p>要約すると以下のような感じ。</p>
<p>・Webサービスだとハイパーリンクとかをたどって ユーザは目的達成できるけど、APIの場合って  多くの場合ドキュメントがWeb上に別個に公開されていて、URLだけ見てもわからない上に、ドキュメントを見ても個々の機能がどのように関連しているかがわかりにくいよね</p>
<p>・そもそも そういうWeb APIのあり方って 自己記述性の点でどうなの？(=RESTfulじゃないよね)</p>
<p>・自己記述的なものが含まれていて、最初のURLさえあれば使い方がわかるようなAPIが理想的だよね</p>
<p>そこで RESTful Web APIの著者は <strong>Collection+JSON</strong> というフォーマットを推奨している。</p>
<h2>Collection+JSONとは？</h2>
<p>JSONが汎用的でプレーンテキストを扱うものだとしたら、Collection+JSON とは JSONよりも限定的で 「<strong>Web上のリソースの検索可能なリストを公開するための規格</strong>」である。</p>
<p>HTTPヘッダでは Content-Type: application/vnd.collection+json という形で渡される。</p>
<p><span id="more-117"></span></p>
<p>RESTful Web APIs 著者がアクセスしたサイトのうち http://youtypeitwepostit.herokuapp.com/app/ にアクセスすると以下のようなJSONデータがGETできる(なお、このURLに関してはレスポンスのContent-Typeに上記の形式が返され、これは主要ブラウザが現在認識しないため ダウンロードが行われる)。</p>
<pre class="brush: jscript; title: ; notranslate">

{
  &quot;collection&quot; :
  {
    &quot;version&quot; : &quot;1.0&quot;,
    &quot;href&quot; : &quot;http://youtypeitwepostit.herokuapp.com/api/&quot;,

    &quot;items&quot; : [
      {
        &quot;href&quot;: &quot;http://youtypeitwepostit.herokuapp.com/api/613856331910938&quot;,
        &quot;data&quot;: [
          {
            &quot;name&quot;: &quot;text&quot;,
            &quot;value&quot;: &quot;Squid!&quot;
          },
          {
            &quot;name&quot;: &quot;date_posted&quot;,
            &quot;value&quot;: &quot;2013-03-28T21:51:08.406Z&quot;
          }
        ]
      }
    ],

    &quot;template&quot; : {
      &quot;data&quot; : [
        {&quot;prompt&quot; : &quot;Text of message&quot;, &quot;name&quot; : &quot;text&quot;, &quot;value&quot; : &quot;&quot;}
      ]
    }
  }
}

</pre>
<p>まず collection という属性があり、items には リソース一覧が返される。リソースにはhref、name、valueがついているが、これがリソースの自己明示性を保つのに一役買っている。</p>
<p>さらに、API経由で データのPOSTを行いたい場合どうすれば良いのかもこのオブジェクトの中に書かれていて、これがWebサイトで言うハイパーメディアの役割を果たしている(「template」の中に書かれたdata属性が持つオブジェクトの形式に沿ってPOSTを行う)。</p>
<p>この構造によって 従来のJSONが表現しづらかった「リンク」を表現できる。なるほど確かにRESTful。</p>
<p><strong>&#8220;constraints can be liberating. ( 「制約」により自由になる )&#8221;</strong></p>
<p>という言葉は特に印象に残っている。</p>
<p>次回の読書会は<strong> 11/14(木) 19:30</strong> から。楽しみ。</p>
<p>(ところで、結局「Squid」って何だったんだろう)</p>
<p>The post <a rel="nofollow" href="http://kinokoru.jp/archives/117">RESTful Web APIs 読書会( 第二回 )に参加してきた</a> appeared first on <a rel="nofollow" href="http://kinokoru.jp">きのこる庭</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kinokoru.jp/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
