Publicidad

Más contenido relacionado

Publicidad

20220416_GraqhQLとORMの連携.pptx

  1. GraphQLとORMの連携について 1/8
  2. 自己紹介 名前:高野 且次(タカノ カツシ) 誕生日:1993/5/6 (現在28歳) 職業:株式会社マーケライズ/開発チーム所属 WEBエンジニア2年目 趣味:一人旅、水泳、ロードバイクなど 2/8
  3. クライアント バックエンド リクエスト レスポンス クライアント側のクエリ言語から リクエストを作成して送信する 受け取ったリクエストとスキーマ言語より レスポンスを作成して送信する 柔軟かつ効率的なデータ通信を行うための、比較的新しいAPI向けクエリ言語 欲しいデータのみが JSON型で返される GraphQLとは? 3/8
  4. GraphQLとORMの連携構築 GraphQLとORMを連携し、クライアントからデータベースまでの通信を実装する クライアント バックエンド リクエスト レスポンス DB データ入力 データ出力 gqlgenを使い、GraphQLで 通信を行うように実装 GORMによる データベースとの通信 ・gqlgen:GolangのGraphQLビルドツールで、扱うデータの型を定義する ・GORM:GolangのORMで、受け取ったクエリからDB操作を行う 4/8
  5. クエリによるuserの新規登録① レスポンスに記載したい 新規登録したUserのデータ 新規に登録する Userのデータ 新規にUserを作るための 関数名 クエリ Postmanを使い、右のデータを GraphQLサーバーにPOSTする 5/8
  6. クエリによるuserの新規登録② データベース内のデータ SQLログ レスポンス クエリ送信からSQL作成→レスポンス返却まで行ってくれる 6/8
  7. クエリによるpostの検索 特定IDのuserが投稿したpostを、 commentも含めて取得したい クエリ レスポンス IDが1のuserの postが取得できた SQL 7/8
  8. GraphQLとORMを組み合わせるメリット ・データベース処理の最適化とレスポンス絞り込みにより、 大きなパフォーマンス向上が狙える ・後からデータ定義を変更しても、容易に対応ができる ・N+1問題やエラーハンドリングなど、GraphQLの苦手分野に 対応がしやすくなる ・DDDやCQRSなど、モダンな設計パターンと相性が良い 8/8
  9. /queryにPOSTすると、 graphqlハンドラが動作する DB接続とルーティング DB接続処理へ gqlgenが用いるResolver型に GORMのDBを渡す Ex.1 DB接続処理
  10. DB操作のコード(CREATE) VALUESに入る値を inputから取得 User作成スキーマ 関数 Userのデータ型 Userにデータを 入れるときの型 スキーマ定義 INSERT文作成 Ex.2
  11. DB操作のコード(READ) GORMの関数を工夫して高速なpostの検索を実現できる JOINとPreloadを使って効率的に 目的データを検索 userのIDを指定してpostを取得 UserテーブルとmarkerテーブルをpostテーブルにJOINして検索 →ヒットしたpostのIDからcommentを検索という流れ Ex.3 スキーマ定義
  12. DB操作のコード(UPDATE) VALUESに入る値を inputから取得 スキーマ 関数 SQLログ First()でIDに合致するUserを探し、 そのUserに対してUpdates()する クエリ Ex.4
  13. DB操作のコード(DELETE) ID指定でUserをDELETEする。 Clausesを呼び出して消去した Userの取得も行う スキーマ 関数 SQLログ Ex.5 クエリ
Publicidad