Baby steps to migratory bird

元半導体系エンジニア、今Webエンジニアの雑記

【参加してきた】よちがや.rb REST会

よちがや.rb REST会について

普段開催日が被っているよちよち.rbとSendagaya.rbの合同開催で、tkawaさんがRESTについてRailsチュートリアルを進めている/終えたレベルの人に向けて、tkawaさんがRESTを解説する会でした。

RESTといえば、去年自分達でやっていたWebを支える技術のテーマもRESTでした。輪読会向けの資料を作る際、毎度tkawaさんの過去記事が参考になりいつかお礼を言いたいなぁと思っていたので、個人的に今回は願ったり叶ったりな会なのでした。

資料

RailsスタイルからRESTを学ぼう よちがや.rb

www.slideshare.net

内容メモ

  • RESTful Web APIs

翻訳されていないらしいですが、tkawaさんが以前読書会をして、良い本だったとのこと。

www.crummy.com

  • RESTとは制約である
  • 9個の要素で出来た枠に沿って当てはめていく

RESTという制約の元でうまく調和を保ちつアプリを作るには、その要素であるURL/HTTP/HTMLのことをよく知り、正しく使いましょう(この3つはWebを支える技術でも再三重要であると挙げられていました)

  • リソースの名前(URI)と4種類の操作(リクエストメソッド)で機能を実現する
  • Railsが広まることで、RESTも広まった。
  • Railsのアクションとリソース/メソッドの対応
  • リクエストメソッドが当てはまらないときは、隠れたリソースがある。

Railsはver2以降、そのリソース設計のパターンをRESTに沿うように方向転換した。それとRailsの普及が相まり、REST視点で違和感のある設計が減少したとのこと。

この点について、規約の強いフレームワークには技術の差分を埋める役割があると以前聞いたことがあったのですが、Railsはある意味正しいフォームの要請ギプスになっているのかなと感じました(逆に隠蔽されることで、意図しないとその差が埋まりづらいとも言えるかも)。

またRailsがデフォルトで作成するControllerのアクションとリソース/メソッドの対応表のがわかりやすかったです。

そして「リクエストメソッドが当てはまらないときは、隠れたリソースがある」という話は、とても学びがあるなぁと頷きながら話を聞いていました。制約に従うことにより、考え方の指標ができるのですね。

  • PUTとPATCHについての質問

ここまでRailsでデフォルトで利用するリクエストメソッドはGET/POST/PUT/DELETEの4つという話だが、Railsではver4からPUTの代わりにPATCHが採用されていますよね?という感じの質問が出ました。tkawaさんが想定Qです!と元気よく返答してたのが印象的でした笑

ちなみにPUTとPATCHは両方ともリソースの更新を行うリクエストメソッドで、 PUTでは変更対象のリソースのデータを丸ごと更新するが、PATCHでは変更対象のリソースのうち変更するデータのみ部分的に更新するという違いがあります。これにより更新操作においてPUTが持っていたべき等性が、PATCHに変更することでべき等でなくなり、色々議論があったそうです。

【参考記事】次期RailsがPATCHメソッドを採用 - ぶろぐ。@はてな

  • 現実的にはRESTから外れる部分もある(なのでRESTful)

とはいえ現実的にはRESTから外れることもあるよね、ということでいくつか質問も挙がっていました。

おまけ

  • Rails周りのHTTP1.1とHTTP2.0の話

RailsではHTTP1.1で通信しているが、その先のCDN以降はHTTP2に変換されてたりする。その距離をできるだけ短くすることで通信の高速化を実現している。元々RailsでHTTP2を採用する構想もあったが、結局そうなってないらしい。

まとめ

今までRailsとRESTは密接に関係があるよという話は聞いていたのですが、tkawaさんの解説によりWebを支える技術で学んだことや普段触るRailsアプリの構造が自分の中でより整理できたように思います。参加して良かった〜