SlideShare a Scribd company logo
1 of 3
Download to read offline
Dojo の QA タイムにて皆さんから頂いたご質問の回答になります。
Q:GraphQL のデメリットは何かあるのでしょうか
⇨GraphQL のデメリットとして以下のような点が挙げられます。
⚫ クライアントが作成した複雑なクエリがサーバーに過負荷をかけることがあります。
例えば、
深いネストや大量のフィールドを要求するクエリは、
サーバーのパフォーマンスに
影響を与える可能性があります。
⚫ REST API では URL ベースでキャッシュを利用できますが、GraphQL は通常 POST
リクエストを使うため、標準の HTTP キャッシュメカニズムが使いづらくなります。
⚫ GraphQL のスキーマ定義やクエリ言語は REST API と比べて学習が必要なため、初期
の導入コストが高い場合があります。
Q:GraphQL は必要なものだけを取得する仕組みなので REST API よりも効率的であると
いう説明が主だったと思いますが、今回の説明のように GraphQL のバックエンドが REST
API なのであれば、結局無駄なオーバーヘッドがサーバ側で発生していると思いますので、
REST API を直接コールするほうが効率的ではありませんか?
⇨GraphQL と REST API のどちらがより効率的かは、使用する状況によります。GraphQL
はデータの柔軟性と精度に優れていますが、バックエンドが REST API である場合、中間
の加工プロセスによるオーバーヘッドが発生する可能性があります。一方、REST API は単
純なデータ取得や小規模な応答には適していますが、複数の API を組み合わせる必要があ
る場合や複雑なデータ要求には限界があります。
Q
:
REST API と GraphQL と使い分け(こういう時は REST API を、
こういう時は GraphQL
を使うべき)について教えて頂けますでしょうか。
⇨シンプルなリソースベースのアクセスは REST API で十分です。 例えば、特定の商品の
詳細情報のような単純なデータ取得には、REST API が適しています。
一方で、複数の異なるリソースからデータを合成する必要がある場合(例:ユーザーのプ
ロフィール情報とそのユーザーが購入した商品リスト)は GraphQL が適しています。
Q:GraphQL でデータを呼び出すときに、条件を指定することは可能でしょうか?
(SQL 文での Where 節に相当する機能があるかどうか、というご質問です。
)
⇨GraphQL でデータを呼び出す際に条件を指定することは可能です。この機能は、データ
ベースのクエリでいう「WHERE」節に似ており、特定の条件に基づいてデータを絞り込む
のに使用します。
例:ID が「123」のユーザーの名前とメールアドレスのみを取得したい
Q:GraphQL の Query でよく使われる edge と node の概念・考え方がよく分かりません。
バックエンド構築する場合、edge と node はどのように考えて構築すれば良いのでしょう
か?
⇨GraphQL の node と edge の概念は、
ページネーションやリレーションのあるデータを効
率的に扱うために非常に役立つものです。
GraphQL の edge と node は主にリレーショナルなデータモデルを表現するために使用さ
れる概念で、特にページネーション(ページ分割)に関連しています。
これらの概念は、クエリの効率的な実行や大量のデータの処理を支援するために導入され
ました。
⚫ Node(ノード)
node は通常、単一のデータ項目を表します。例えば、ユーザー、記事、商品などがノード
になります。node はコレクション内の単一の要素です。
⚫ Edge(エッジ)
edge はノードをコレクション内に関連付け、かつそのノードに対する追加情報(通常はカ
ーソルと呼ばれるページネーションのための位置情報)
を提供します。
エッジはノードをつ
なぎ、ページネーションを可能にします。
Q:Node の Apollo Server を利用して Graphql を使ったことがありますが、stepzen という
ものは Apollo Server に代わるものという認識でよいでしょうか?
また stepzen は SaaS ということですか?
query {
user(id: "123") {
name
email
}
}
⇨Apollo Server は、Node.js 環境で GraphQL サーバーを構築するためのフレームワークで
す。Dojo で使用した StepZen は異なるソース(REST API、データベースなど)からデー
タを統合して GraphQL API を提供する SaaS プラットフォームです。StepZen はバックエ
ンドの統合と管理に特化しています。
Q:GraphQL から REST API や DB へアクセスする際のアクセスユーザーは、どう指定さ
れていますでしょうか?
DB だとユーザーID など指定する必要があるのではと思っております。
⇨StepZen 製品で使用した場合で回答いたします。
StepZen では、GraphQL スキーマの定義時に、各データソースへのアクセスに必要な認証
情報(API キー、データベースのユーザー名とパスワードなど)を設定します。
もしGraphQLクエリが動的に異なるユーザー情報
(ログインしているユーザーのIDなど)
に基づいてデータを取得する必要がある場合、
その情報はクエリの引数として GraphQL サ
ーバーに渡され、StepZen はそれを適切なデータソースに転送します。
Q:HTTP キャッシュは可能でしょうか。
⇨GraphQL は、一般的に POST リクエストを使用するため、HTTP キャッシュの利用が
難しいです。しかし、GET リクエストを利用する手法などで対処することが可能です。

More Related Content

Similar to QA回答.pdf

JapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxJapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxRyota Tabuse
 
Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話Progate, Inc.
 
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南Google Cloud Platform - Japan
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスzaru sakuraba
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービスcch-robo
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Yuji Kubota
 
Solving Sudoku by SAT Solver 01
Solving Sudoku by SAT Solver 01Solving Sudoku by SAT Solver 01
Solving Sudoku by SAT Solver 01OkamotoYuki2
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with DockerOshitari_kochi
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cketMakoto Haruyama
 
何でRuby
何でRuby何でRuby
何でRubyNgoc Dao
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-FrameKazuhiro Hara
 
Amazon Redshift ことはじめ
Amazon Redshift ことはじめAmazon Redshift ことはじめ
Amazon Redshift ことはじめShiro Miyazaki
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 

Similar to QA回答.pdf (20)

Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)
 
JapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxJapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptx
 
JSON吸って吐く機械
JSON吸って吐く機械JSON吸って吐く機械
JSON吸って吐く機械
 
Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話
 
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
 
Oracle GoldenGate Cloud Service(GGCS)概要
Oracle GoldenGate Cloud Service(GGCS)概要Oracle GoldenGate Cloud Service(GGCS)概要
Oracle GoldenGate Cloud Service(GGCS)概要
 
CarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラスCarrierWaveにちょっと互換あるGCP Storage対応クラス
CarrierWaveにちょっと互換あるGCP Storage対応クラス
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
20130126 sc12-reading
20130126 sc12-reading20130126 sc12-reading
20130126 sc12-reading
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
 
Solving Sudoku by SAT Solver 01
Solving Sudoku by SAT Solver 01Solving Sudoku by SAT Solver 01
Solving Sudoku by SAT Solver 01
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with Docker
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cket
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
何でRuby
何でRuby何でRuby
何でRuby
 
GraphQL with scala
GraphQL with scalaGraphQL with scala
GraphQL with scala
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
 
Amazon Redshift ことはじめ
Amazon Redshift ことはじめAmazon Redshift ことはじめ
Amazon Redshift ことはじめ
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 

QA回答.pdf

  • 1. Dojo の QA タイムにて皆さんから頂いたご質問の回答になります。 Q:GraphQL のデメリットは何かあるのでしょうか ⇨GraphQL のデメリットとして以下のような点が挙げられます。 ⚫ クライアントが作成した複雑なクエリがサーバーに過負荷をかけることがあります。 例えば、 深いネストや大量のフィールドを要求するクエリは、 サーバーのパフォーマンスに 影響を与える可能性があります。 ⚫ REST API では URL ベースでキャッシュを利用できますが、GraphQL は通常 POST リクエストを使うため、標準の HTTP キャッシュメカニズムが使いづらくなります。 ⚫ GraphQL のスキーマ定義やクエリ言語は REST API と比べて学習が必要なため、初期 の導入コストが高い場合があります。 Q:GraphQL は必要なものだけを取得する仕組みなので REST API よりも効率的であると いう説明が主だったと思いますが、今回の説明のように GraphQL のバックエンドが REST API なのであれば、結局無駄なオーバーヘッドがサーバ側で発生していると思いますので、 REST API を直接コールするほうが効率的ではありませんか? ⇨GraphQL と REST API のどちらがより効率的かは、使用する状況によります。GraphQL はデータの柔軟性と精度に優れていますが、バックエンドが REST API である場合、中間 の加工プロセスによるオーバーヘッドが発生する可能性があります。一方、REST API は単 純なデータ取得や小規模な応答には適していますが、複数の API を組み合わせる必要があ る場合や複雑なデータ要求には限界があります。 Q : REST API と GraphQL と使い分け(こういう時は REST API を、 こういう時は GraphQL を使うべき)について教えて頂けますでしょうか。 ⇨シンプルなリソースベースのアクセスは REST API で十分です。 例えば、特定の商品の 詳細情報のような単純なデータ取得には、REST API が適しています。 一方で、複数の異なるリソースからデータを合成する必要がある場合(例:ユーザーのプ ロフィール情報とそのユーザーが購入した商品リスト)は GraphQL が適しています。 Q:GraphQL でデータを呼び出すときに、条件を指定することは可能でしょうか? (SQL 文での Where 節に相当する機能があるかどうか、というご質問です。 ) ⇨GraphQL でデータを呼び出す際に条件を指定することは可能です。この機能は、データ
  • 2. ベースのクエリでいう「WHERE」節に似ており、特定の条件に基づいてデータを絞り込む のに使用します。 例:ID が「123」のユーザーの名前とメールアドレスのみを取得したい Q:GraphQL の Query でよく使われる edge と node の概念・考え方がよく分かりません。 バックエンド構築する場合、edge と node はどのように考えて構築すれば良いのでしょう か? ⇨GraphQL の node と edge の概念は、 ページネーションやリレーションのあるデータを効 率的に扱うために非常に役立つものです。 GraphQL の edge と node は主にリレーショナルなデータモデルを表現するために使用さ れる概念で、特にページネーション(ページ分割)に関連しています。 これらの概念は、クエリの効率的な実行や大量のデータの処理を支援するために導入され ました。 ⚫ Node(ノード) node は通常、単一のデータ項目を表します。例えば、ユーザー、記事、商品などがノード になります。node はコレクション内の単一の要素です。 ⚫ Edge(エッジ) edge はノードをコレクション内に関連付け、かつそのノードに対する追加情報(通常はカ ーソルと呼ばれるページネーションのための位置情報) を提供します。 エッジはノードをつ なぎ、ページネーションを可能にします。 Q:Node の Apollo Server を利用して Graphql を使ったことがありますが、stepzen という ものは Apollo Server に代わるものという認識でよいでしょうか? また stepzen は SaaS ということですか? query { user(id: "123") { name email } }
  • 3. ⇨Apollo Server は、Node.js 環境で GraphQL サーバーを構築するためのフレームワークで す。Dojo で使用した StepZen は異なるソース(REST API、データベースなど)からデー タを統合して GraphQL API を提供する SaaS プラットフォームです。StepZen はバックエ ンドの統合と管理に特化しています。 Q:GraphQL から REST API や DB へアクセスする際のアクセスユーザーは、どう指定さ れていますでしょうか? DB だとユーザーID など指定する必要があるのではと思っております。 ⇨StepZen 製品で使用した場合で回答いたします。 StepZen では、GraphQL スキーマの定義時に、各データソースへのアクセスに必要な認証 情報(API キー、データベースのユーザー名とパスワードなど)を設定します。 もしGraphQLクエリが動的に異なるユーザー情報 (ログインしているユーザーのIDなど) に基づいてデータを取得する必要がある場合、 その情報はクエリの引数として GraphQL サ ーバーに渡され、StepZen はそれを適切なデータソースに転送します。 Q:HTTP キャッシュは可能でしょうか。 ⇨GraphQL は、一般的に POST リクエストを使用するため、HTTP キャッシュの利用が 難しいです。しかし、GET リクエストを利用する手法などで対処することが可能です。