SlideShare a Scribd company logo
1 of 12
RESTからGraphQL API
への移行で学んだこと
@inoway46
自己紹介
・GMOペパボにて主にRailsでECアプリの開発をしてます Twitter: @inoway46
・Web広告の営業から1年半前にWebエンジニアになりました
・最近は英会話をがんばってます
・麻雀が特技です
技術スタック(簡易版)
サーバーサイド
・Rails 7.0、Ruby 3.1、graphql-ruby
クライアントサイド
・Web -> Next.js(一部はRailsのview)
・Android
・iOS
なぜGraphQLに移行したのか
iOS、Android、Next.jsで使用するAPIを共通化し、
開発効率を高めたい
GraphQLの利点
・オーバーフェッチ、アンダーフェッチを防げる
・1回のリクエストで必要なデータを取ってこれる
・リクエスト数が少なくなるので、アプリのパフォーマンスがよくなる
GraphQLの開発秘話:https://youtu.be/783ccP__No8
GraphQLのキャッチアップ
- はじめてのGraphQLを読む
- zennのチュートリアルなどで書いてみる
- 他社事例を学ぶ
- メルカリ社、ZOZO社
- 既存コードを読む
- graphiqlで既存のクエリを叩いてみる
- 後は開発する中で理解していく
https://www.oreilly.co.jp/books/9784873118932/
学びになったこと
1. 型の定義が重要
2. セキュリティの観点
3. クライアントサイドとの調整
1. 型の定義が重要
- 命名を間違えると後々面倒なことになる
- もし間違えていたら、@deprecatedディレクティブを
生やした上で、新規追加する
2. セキュリティの観点
1. 直接型を参照されてしまわないように、self.authorized?を設定する
https://graphql-ruby.org/authorization/authorization
1. 型定義を循環させる(再帰的に解決できるスキーマが存在する)と意図的にネストを深くしたクエリ
をリクエストされDos攻撃されるリスクがある
https://github.com/WebAppPentestGuidelines/graphQLGuideLine/blob/master/docs/specific/dos.md
1. viewerパターンを採用し、個人情報の不正取得を防ぐ
current_userを起点に各情報を取ってくるようにする。
self.authorized?で対象オブジェクトがcurrent_userのものでなければ認可エラーを返す
3. クライアントサイドとの調整
- 現状のUIと整合性のある形でmutationを定義しないと、自然な形で
リクエストが送れない
- ex. 親リソースと子リソースを同じ編集画面で操作する場合、子
リソースの削除mutationだけ分離すると、違和感のある動きになっ
てしまうことがあった
その他、実装で難しかった点
・ページネーションの書き方が独特
・既存のAPI仕様を理解した上で、壊さないようにしないといけない
・graphiqlの扱いに最初慣れなかった
・RSpec(テスト)でテストデータを準備するやり方
・例外処理
参照: ZOZO社の事例
以上です!ありがとうございました!

More Related Content

Similar to RESTからGraphQL APIへの移行で学んだこと.pptx

【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)Sosuke Kimura
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with RubyHiroshi SHIBATA
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎schoowebcampus
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails Kohei Ito
 
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa楽ちんユーザー認証付Spa
楽ちんユーザー認証付SpaTakahiro Tsuchiya
 
WebAPI20230326.pdf
WebAPI20230326.pdfWebAPI20230326.pdf
WebAPI20230326.pdfRyoArakaki1
 
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.jsRendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.jsMasahiko Tachizono
 
Webエンジニアのサバイバル英会話
Webエンジニアのサバイバル英会話Webエンジニアのサバイバル英会話
Webエンジニアのサバイバル英会話Jumpei iwamura
 
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからYusuke Murata
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Yasuko Ohba
 
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動Shingo Sasaki
 
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリングInnova Inc.
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Kazuya Sugimoto
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間Matsuo Obu
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場Yasuko Ohba
 

Similar to RESTからGraphQL APIへの移行で学んだこと.pptx (20)

【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
 
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
 
2015 12-19-ruby rails
2015 12-19-ruby rails2015 12-19-ruby rails
2015 12-19-ruby rails
 
WebAPI20230326.pdf
WebAPI20230326.pdfWebAPI20230326.pdf
WebAPI20230326.pdf
 
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.jsRendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.js
 
Webエンジニアのサバイバル英会話
Webエンジニアのサバイバル英会話Webエンジニアのサバイバル英会話
Webエンジニアのサバイバル英会話
 
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
 
Web api beginners
Web api beginnersWeb api beginners
Web api beginners
 
Rails講座1
Rails講座1Rails講座1
Rails講座1
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)
 
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動
レガシーすぎるRailsアプリを10倍高速化した組織的なカイゼン活動
 
20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング20141003 webマーケティングエンジニアリング
20141003 webマーケティングエンジニアリング
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
 
BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012
 

RESTからGraphQL APIへの移行で学んだこと.pptx