実践を取り入れてみたRESTful#とは勉強会5
先日、第5回目のRESTful#とは勉強会を開催しました。
年度末なので忙しい方が多かったのではないかと思いますが、参加してくれた皆様、ありがとうございます。
私自身も割と疲れ果てていて(ヽ´ω`) 、集中最後まで持って~ と願いながら参加しましたが、開始してみると逆に元気になりました!
21cafeさんの素敵過ぎるオフィスをお借りし、
可愛すぎる管理人のえりーさんのサポートを頂きながらの開催でした。ありがとうございます。
(geechsさんはエンジニアの方もオシャレ!!!!)


最初は毎度おなじみの「Webを支える技術」の読書会です。
@tkawaさんが出題してくれる課題を考えながらべき等性に関して考えながら輪読しました。
この章で学ぶことは
コレですね。
べき等性ってなんやねん?と最初読んだ時思いましたが、
ある操作を何回行っても結果が同じことを意味する数学用語だそうで、
Wikipediaでは「エレベータを呼ぶボタンも冪等である(エレベータが到着するまで何度押しても効果は変わらない)が、人によってはそうでないかのように(エレベータが早く到着することを期待して)何度も押してしまう。」などの例が書いておりクスッとしました。
うちや他の班で
DELETEがべき等性???
1回目と2回目で返ってくるステータスコードが違うのに???
#RESTudy DELETEは1回目200で、2回目は404なのにべき等??
— shokola (@shokolateday) 2015, 3月 25
_人人人人人人人人人人人人人人人人人人人人人人人人人人人_
> なんで返ってくるレスポンスが違うのにべき等なんだ! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ #RESTudy
— うるは (@ur_uha) 2015, 3月 25
ということが話題になりましたが、
@tkawaさんAnswerでは
#RESTudy レスポンスではなく、リソースの状態がどうなってるかが重要
— shokola (@shokolateday) 2015, 3月 25
だそうです。
他に@tkawaさんのお題に
グループで考えてみよう
べき等性と安全性 (p.101)
「安全」と「べき等」の概念は理解できましたか? とくに「べき等」を噛み砕いて言うと? 本文の例のほかに「べき等」な例を挙げてみましょう。
よく使うRubyのメソッド(他の言語でもOK)がべき等かどうか考えてみましょう。
べき等だと何がメリットなのでしょうか?
うちの班で「FBのいいね!ボタンはべき等性では??」
という話が出たのですが、多分「いいね!」はどんなに押してもカウントが増えず1「いいね!」にしかならないから浮かんだと思うのですが、
実際には「いいね!」をもう一度押すと「いいね!を取り消す」に変わるのでした。
やっぱりよく使うサービスには皆興味があって
#RESTudy
素朴な質問:-1をかけるのはべき等か?
or FBのいいねボタンを何度も押すのは冪等か?
— Masayuki Uchida (@etmnk) 2015, 3月 25
「いいね!」を押下するたびに×-1を実行しているのではないか。
など話になりましたが、
#RESTudy
https://t.co/YpjNzQNeyp
なるほど、「いいね」と「いいねの解除」は、postとdeleteで分けてる、と
— Masayuki Uchida (@etmnk) 2015, 3月 25
こうでした。
ワークショップの時間でも
#RESTudy
starを送る場合は
ID/リソース/star
なのに
star解除の場合は
ID/リソース/unstar
のpost..
さっきのtoggle_publicと一貫性がない気がする。。
— Masayuki Uchida (@etmnk) 2015, 3月 25
スターのところが注目されています。
さて、そう!ワークショップです。
今回は実践もやってみようと思い、GithubのGistを課題に選んで、どこがRESTfulかそうじゃないか、を調べてみることにしました。
注目するポイント
どういう画面があるでしょうか? それによってリソースを見つけることができます。
画面=URL(をGETしたもの)=リソース
そのURLはどんな名前でどういう形をしているでしょうか?
それぞれの画面にはどんなリンクやフォームがあるでしょうか? フォームのメソッドは?
ここはRESTfulだ、ここはRESTfulじゃない、と思うところはどこでしょうか? どうすればよりRESTfulにできるでしょうか?
個人的にGithubはスーパーDeveloper集団が作っている!というイメージですが、
さてどんな感じでしょうか?
今回のワークショップで出た意見
https://t.co/HyFfFW4DCo べき等とは関係ないけど動詞含む系URLだ #RESTudy
— Hiroyuki Morita (@chiastolite) 2015, 3月 25
これはわかりやすい。
名詞のgist.github.com/discoveryにしたら良いかもですね。
#RESTudy gistのトップ画面はlogoutだけpostになってる。リンクすると、logoutしますか?画面
— ソエダユースケ (@soeda_jp) 2015, 3月 25
logout専用画面が出てきます。
これはうちの班でも話題になりました。
gist、logout押すとPOSTでhttp://t.co/1VFCZf69KW側に飛んでる。そして戻る押してからlogoutをもう1回押すとエラーになるバグ見つけた #RESTudy
— Hiroyuki Morita (@chiastolite) 2015, 3月 25
えっ
なんと
賞金もらえるのでは
と思って調べたけど、決定的なものは見つかりませんでした。
しかしこんなサービス見つけました
OSSのバグを直して賞金がゲットできるBountysource
こういうサービスでOSSに貢献するの良いですね。
私もいつかOSSにPR投げてみたい
それから、GistのURLの話。
例えば私の昔書いた自己紹介Gistは
「gist.github.com/shokola/7867071」というURLです。
最後の7867071はユニークで、例え「shokola」の部分を削除しても正しいGistにリダイレクトされる。
何故かと言うと、こんな記事もあるように
[新機能] Gist の URL にユーザー名が入るようになりました
「以前は、URLにユーザ名は入ってなかったという(仕様変更した)歴史的経緯があるからでは。」という話など聞けました。
(ちなみにgithubユーザ名変えても以前のが出てくるので、古いユーザ名を記憶してくれているようです)
やってみて
・・・えーとですね
個人的にはワークショップやって始めて前半の読書会の内容が繋がって!
「えっもしかしてPUT、DLETEのときって常にべき等性か意識しないといけないの!?なんと!!!それは大変 !!!」などと間抜けにも気が付きました(おそっ!!!!!)
なのでこんな鈍い座学が座学で終わってしまうタイプには実践本当に大事です‥
そんな感じで今回も楽しくて勉強になりました。
個人的な感想かもしれませんが(もしかして独りよがりだったりして)、
RESTful勉強会はいつも楽しい。
今日の回はいまいちだったわ‥ なんてことがありません。
それは講師や参加された皆様が熱心でフレンドリーであるおかげです。
次回も実践やりましょう!
課題何にしよう !!