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

NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影

gree_tech
September 18, 2020

NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影

GREE Tech Conference 2020 で発表された資料です。
https://techcon.gree.jp/2020/session/Session-2

gree_tech

September 18, 2020
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 自己紹介 2 • 名前 • 村田 翔 • 担当 •

    サーバーサイド兼フロントエンドエンジニア • メインはRuby on Rails • aumo歴 • 3年弱(サーバーサイドでは最古参) • 旅行好きなのもあって、aumoに長らく在籍
  2. 3 ⓘ Start presenting to display the poll results on

    this slide. aumoはご存知ですか?
  3. 1.なぜREST APIからGraphQLに変更したのか 2.GraphQL化して見えたこと • 光 • エンドポイント • 仕様変更 •

    影 • N+1 • エラーハンドリンク • ログ解析 今日お伝えすること 10
  4. 1.なぜREST APIからGraphQLに変更したのか 2.GraphQL化して見えたこと • 光 • エンドポイント • 仕様変更 •

    影 • N+1 • エラーハンドリンク • ログ解析 今日お伝えすること 11
  5. 12 ⓘ Start presenting to display the poll results on

    this slide. GraphQL使っていますか?
  6. • バックエンド • Ruby on Rails • REST API •

    GraphQL • graphql • graphql-batch • graphiql-rails • フロントエンド • NuxtJS • ログ監視 • Papertrail • Sentry 構成 13
  7. 構成 15 Amazon EC2 Amazon EC2 ELB サブドメインで3サイト搭載 • middlewareでFQDN毎にパスチェック

    • 各トップページはFQDNを元にコンポーネント出しわけ • 各詳細ページはNuxtJSのディレクトリ規約に沿って設置 フロントエンドでのサイト分割
  8. 1.なぜREST APIからGraphQLに変更したのか 2.GraphQL化して見えたこと • 光 • エンドポイント • 仕様変更 •

    影 • N+1 • エラーハンドリンク • ログ解析 今日お伝えすること 26
  9. エンドポイント 27 [GET] /api/v1/hotels [GET] /api/v1/hotels/{hotel_id} [GET] /api/v1/hotels/search [GET] /api/v1/gourmets

    [GET] /api/v1/gourmets/{gourmet_id} ・ ・ ・ ルーティング追加して、 コントローラー追加して、 ビュー追加して・・・ • サイト追加毎に増えていくエンドポイント...
  10. • エンドポイント単一 エンドポイント 28 [GET] /api/v1/hotels [GET] /api/v1/hotels/{hotel_id} [GET] /api/v1/hotels/search

    [GET] /api/v1/gourmets [GET] /api/v1/gourmets/{gourmet_id} ・ ・ ・ ルーティング追加して、 コントローラー追加して、 ビュー追加して・・・ [POST] /graphql スキーマとフィールド更新のみ ×
  11. • REST APIの場合 • バックエンド • 対象エンドポイントのレスポンスに要素追加 or エンドポイント追加 •

    フロントエンド • 新規要素表示 • エンドポイント追加の場合は新たに呼び出し追加 各サイトの詳細ページに周辺施設情報の要素追加したい 仕様変更 30
  12. • GraphQLの場合 • バックエンド • スキーマとフィールド更新 • フロントエンド • 新規要素表示

    • クエリに新規で追加する要素を追記 各サイトの詳細ページに周辺施設情報の要素追加したい 仕様変更 31
  13. • REST APIの場合 • バックエンド • 対象のエンドポイントのレスポンスから削除 or エンドポイント追加 •

    フロントエンド • 要素削除 各サイトの詳細ページに周辺施設情報の要素削除したい 仕様変更 33
  14. 1.なぜREST APIからGraphQLに変更したのか 2.GraphQL化して見えたこと • 光 • エンドポイント • 仕様変更 •

    影 • N+1 • エラーハンドリンク • ログ解析 今日お伝えすること 36
  15. 45