GraqhQLとORMの連携について

>100 Views

January 18, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

1/8 GraphQLとORMの連携について

2.

2/8 自己紹介 名前:高野 且次(タカノ カツシ) 誕生日:1993/5/6 (現在28歳) 職業:株式会社マーケライズ/開発チーム所属 WEBエンジニア2年目 趣味:一人旅、水泳、ロードバイクなど

3.

3/8 GraphQLとは? 柔軟かつ効率的なデータ通信を行うための、比較的新しいAPI向けクエリ言語 リクエスト クライアント バックエンド レスポンス クライアント側のクエリ言語から リクエストを作成して送信する 受け取ったリクエストとスキーマ言語より レスポンスを作成して送信する 欲しいデータのみが JSON型で返される

4.

4/8 GraphQLとORMの連携構築 GraphQLとORMを連携し、クライアントからデータベースまでの通信を実装する ・gqlgen:GolangのGraphQLビルドツールで、扱うデータの型を定義する ・GORM:GolangのORMで、受け取ったクエリからDB操作を行う データ入力 リクエスト クライアント バックエンド レスポンス gqlgenを使い、GraphQLで 通信を行うように実装 DB データ出力 GORMによる データベースとの通信

5.

5/8 クエリによるuserの新規登録① クエリ Postmanを使い、右のデータを GraphQLサーバーにPOSTする 新規にUserを作るための 関数名 新規に登録する Userのデータ レスポンスに記載したい 新規登録したUserのデータ

6.

6/8 クエリによるuserの新規登録② クエリ送信からSQL作成→レスポンス返却まで行ってくれる SQLログ レスポンス データベース内のデータ

7.

クエリによるpostの検索 7/8 レスポンス クエリ IDが1のuserの postが取得できた 特定IDのuserが投稿したpostを、 commentも含めて取得したい SQL

8.

8/8 GraphQLとORMを組み合わせるメリット ・データベース処理の最適化とレスポンス絞り込みにより、 大きなパフォーマンス向上が狙える ・後からデータ定義を変更しても、容易に対応ができる ・N+1問題やエラーハンドリングなど、GraphQLの苦手分野に 対応がしやすくなる ・DDDやCQRSなど、モダンな設計パターンと相性が良い

9.

Ex.1 DB接続とルーティング DB接続処理へ /queryにPOSTすると、 graphqlハンドラが動作する gqlgenが用いるResolver型に GORMのDBを渡す DB接続処理

10.

Ex.2 DB操作のコード(CREATE) スキーマ定義 User作成スキーマ 関数 Userのデータ型 VALUESに入る値を inputから取得 INSERT文作成 Userにデータを 入れるときの型

11.

Ex.3 DB操作のコード(READ) GORMの関数を工夫して高速なpostの検索を実現できる スキーマ定義 JOINとPreloadを使って効率的に 目的データを検索 userのIDを指定してpostを取得 UserテーブルとmarkerテーブルをpostテーブルにJOINして検索 →ヒットしたpostのIDからcommentを検索という流れ

12.

Ex.4 DB操作のコード(UPDATE) スキーマ First()でIDに合致するUserを探し、 そのUserに対してUpdates()する 関数 SQLログ VALUESに入る値を inputから取得 クエリ

13.

Ex.5 DB操作のコード(DELETE) クエリ スキーマ 関数 ID指定でUserをDELETEする。 Clausesを呼び出して消去した Userの取得も行う SQLログ