Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クックパッドインターンシップ 2018 API 編(前半)/ Cookpad inter...

hogelog
September 13, 2018

クックパッドインターンシップ 2018 API 編(前半)/ Cookpad internship 2018 Day 3: API

hogelog

September 13, 2018
Tweet

More Decks by hogelog

Other Decks in Technology

Transcript

  1. hogelog (小室 直) • 2011/3 電気通信大学電気通信学研究科情報工学専攻 卒 • 2011/4 株式会社ドワンゴ

    入社 • 2012/11 株式会社サイバーエージェント 入社 • 2013/8 クックパッド株式会社 入社 ◦ レシピ投稿関連の開発等(Web, Android) ◦ 会員事業関連、OEM 向け API 開発等 (Web, Android) ◦ 開発基盤(いろいろ)
  2. Day 3, 4, 5 (8/29 - 8/31) • チャットアプリケーションをつくっていきます ◦

    3日目: サーバサイド ◦ 4日目: クライアント ◦ 5日目: インフラ
  3. API の要求仕様 1. REST API a. チャット履歴取得、画像読み書き等 2. リアルタイムな WebSocket

    API a. リアルタイムなチャットメッセージ https://cookpad.github.io/cookpad-internship-2018-summer/slackpad-server/
  4. Rails と Rack • Rails は Rack という Ruby 向けウェブアプリケーション用イ

    ンターフェースに乗った形で実装されています ◦ そのため Rack 向けライブラリや資産をそのまま Rails 用に使えます
  5. Rails の気をつけるところ • Rails は変わり続ける ◦ 古い Rails のメンテナンスはそのうち止まる ◦

    Rails アプリケーションは最新 Rails に追随し続けなければいけない • 機能を実装する速度に注力したフレームワーク • 全てが Rails Way の上で実現できるわけではない
  6. REST API • REST の思想に沿って設計された Web API ◦ Web API

    の設計方針としてデファクトスタンダード • Book リソースを扱うなら以下のような URL となる ◦ POST /books ◦ GET /books, GET /books/:id ◦ PUT /books/:id ◦ DELETE /books/:id
  7. Rails と REST リソースベースのルーティング (以下リソースルーティング ) を使用することで、リソースベースで構成されたコントローラに対応する共通のルーティングを手軽 に宣言できます。リソースフルなルーティングを宣言することで、コントローラの index、show、new、edit、create、update、destroyアクションを個別に宣言し なくても1行で宣言が完了します。

    ブラウザはRailsに対してリクエストを送信する際に、特定の HTTPメソッド (GET、POST、PATCH、PUT、DELETEなど) を使用して、URLに対するリクエストを 作成します。上に述べた HTTPメソッドは、いずれもリソースに対して特定の操作の実行を指示するリクエストです。リソースルーティングでは、関連するさまざ まなリクエストを1つのコントローラ内のアクションに割り当てます。 Railsアプリケーションが以下の HTTPリクエストを受け取ったとします。 DELETE /photos/17 このリクエストは、特定のコントローラ内アクションにマッピングさせるようルーターに要求しています。最初にマッチしたのが以下のルーティングだとします。 resources :photos Railsはこのリクエストをphotosコントローラ内のdestroyアクションに割り当て、 paramsハッシュに{ id: '17' }を含めます。 https://railsguides.jp/routing.html
  8. Rails と REST • Rails は REST 考えに基づいている ◦ 考えに沿ってアプリケーションを設計をすると実装が簡潔になる

    • Book リソースの URL ルーティング定義は一行に ◦ resources :books ▪ POST /books ▪ GET /books, GET /books/:id ▪ PUT /books/:id ▪ DELETE /books/:id
  9. (余談)REST API 以外の選択肢 • gRPC ◦ 分散システム上で動く RPC フレームワーク •

    GraphQL API ◦ GraphQL と呼ばれるクエリを受け取る API • XML-RPC, SOAP, … ◦ 色々あります(ありました)
  10. WebSocket とは The WebSocket protocol enables interaction between a web

    client (such as a browser) and a web server with lower overheads, facilitating real-time data transfer from and to the server. WebSocket プロトコルはウェブクライアント(ブラウザなど)とウェブサーバーの相互 通信を可能にし、オーバーヘッドを削減し、サーバーとのリアルタイムのデータ転送を 容易にします。 https://en.wikipedia.org/wiki/WebSocket
  11. WebSocket • クライアントとサーバ間の双方向通信プロトコル ◦ HTTP 上で実現されているプロトコルではない ◦ 接続確立時のみ HTTP のようなハンドシェイクがやり取りされる

    • IE, Firefox, Chrome, Safari, Edge 等各種ブラウザ対応 ◦ ReactNative も https://facebook.github.io/react-native/docs/network#websocket-support
  12. Rails と WebSocket • Action Cable が Rails 5 から導入

    Action Cableは、 WebSocketとRailsのその他の部分をシームレスに統合するためのもので す。Action Cable が導入されたことで、 Rails アプリケーションの効率の良さとスケーラビリティ を損なわずに、通常の Railsアプリケーションと同じスタイル・方法でリアルタイム機能を Rubyで 記述できます。クライアント側の JavaScriptフレームワークとサーバー側の Rubyフレームワーク を同時に提供する、フルスタックのフレームワークです。 Active RecordなどのORMで書かれた すべてのドメインモデルにアクセスできます。 https://railsguides.jp/action_cable_overview.html
  13. WebSocket 実装 • 各種言語、フレームワークでのサポート ◦ C++, Java, Go, Elixir, Node,

    Ruby, ... ▪ https://github.com/facundofarias/awesome-websockets ▪ https://hashrocket.com/blog/posts/websocket-shootout ◦ 要件と仕様にあった選択が大事
  14. テストに関する資料  • Rails テスティングガイド ◦ https://railsguides.jp/testing.html • クックパッド サマーインターンシップ2017 TDD

    ◦ https://speakerdeck.com/moro/cookpad-17day-tech-internship-2017-tdd • RSpecの入門とその一歩先へ ~RSpec 3バージョン~ ◦ https://qiita.com/jnchito/items/624f6d5023c279046a1c • Better Specs ◦ http://www.betterspecs.org/