Atlas GraphQL API [非推奨]
GraphQL は廃止予定です。詳細はこちら。
Overview
Atlas GraphQL クライアント アプリケーションは API を使用すると、任意の GraphQL クライアントを使用してリンクされた MongoDB Atlas クラスターに保存されているデータにアクセスできます。
Atlas App Services は、定義されたスキーマを持つリンクされたコレクションごとに GraphQL 型を自動的に作成し、すべての GraphQL リクエストに対するロールベースの権限を評価します。GraphQL API を通じてデータを利用できるようにする方法については、「コレクション内のデータの公開」を参照してください。
Atlas GraphQL API を使用して生成される型と操作の詳細については、「GraphQL の型とリゾルバ」を参照してください。
生成される GraphQL API の機能をカスタム クエリとミューテーションで拡張するには、「カスタムリゾルバの定義」を参照してください。
注意
Atlas クラスターを無料で作成
GraphQL API を使用すると、MongoDB Atlas クラスターまたはフェデレーテッドデータベースインスタンスに保存したデータにアクセスできます。開始するには無料のクラスターを作成してアプリにリンクします。
まだデータはないが GraphQL API を調べたい場合は、サンプル データセットをクラスターに追加することを検討してください。
GraphQL を使用する理由
GraphQL は、クライアント アプリケーション向けの宣言型の厳密に型指定されたクエリ言語です。クライアントは、必要なデータの形状と内容を1回のリクエストで正確に定義できるため、オーバーフェッチの問題がなくなり、コストのかかるサーバーへの複数のラウンドトリップが不要になります。
GraphQL について詳しくは、公式の GraphQL チュートリアルを参照してください。
App Services が GraphQL スキーマを作成する方法
App Services を使用して、MongoDB コレクションの JSON スキーマから GraphQL スキーマとリゾルバを生成します。これは、GraphQL スキーマ開発における従来のコード ファーストやスキーマ ファーストのアプローチとは異なります。
App Services を使用して GraphQL スキーマを定義する方法
お使いの MongoDB Atlas クラスターの MongoDB コレクション用に JSON schema を定義します。カスタム定義に基づいてコレクション スキーマの形状を適用することも、コレクション内のドキュメントに基づいて生成されたスキーマを使用することもできます。
コレクション JSON schema に基づいて GraphQL スキーマとリゾルバを生成します。
オプションで、生成される GraphQL スキーマの機能をカスタムリゾルバで拡張することもできます。
GraphQL の操作
App Services は、GraphQL API に公開するデータの型とリゾルバを自動的に生成します。生成される型と操作はすべて、公開される各コレクションの基本型名にちなんで命名されます。型名を定義しない場合、App Services は代わりにコレクション名を使用します。
コレクションを公開する方法とそのデータ型に名前を付ける方法の詳細については、「コレクション内のデータの公開」を参照してください。
注意
GraphQL ミューテーションとカスタム リゾルバのリクエストは、MongoDB トランザクションを使用して、複数のデータベース操作にわたって正確性を確保します。リクエスト内のいずれかの操作が失敗すると、トランザクション全体が失敗し、データベースに操作はコミットされません。
クエリ
GraphQL クエリは、1 つまたは複数のタイプから特定のフィールドをリクエストする読み取り操作です。App Services は、スキーマが定義されている各コレクション内のドキュメントのクエリ型を自動的に生成します。
自動生成されるすべてのクエリ タイプのリストを含む詳細と例については、「クエリ リゾルバ」を参照してください。
# Find a single movie by name query { movie(query: { title: "The Matrix" }) { _id title year runtime } } # Find all movies from the year 2000 query { movies(query: { year: 2000 }) { _id title year runtime } } # Find the ten longest movies from the year 2000 query { movies( query: { year: 2000 } sortBy: RUNTIME_DESC limit: 10 ) { _id title year runtime } }
ミューテーション
GraphQL ミューテーションは、1 つ以上のドキュメントを作成、変更、または削除する書込み操作です。App Services は、スキーマが定義されている各コレクション内のドキュメントのミューテーション型を自動的に生成します。App Services はトランザクションを使用して、ミューテーションによる安全な書込みを保証します。
自動生成されるすべてのミューテーション タイプのリストを含む詳細と例については、「ミューテーション リゾルバ」を参照してください。
# Insert a new movie mutation { insertOneMovie(data: { title: "Little Women" director: "Greta Gerwig" year: 2019 runtime: 135 }) { _id title } } # Update the year of a movie mutation { updateOneMovie( query: { title: "The Matrix" } set: { year: 1999 } ) { _id title } } # Delete a movie mutation { deleteOneMovie(query: { title: "The Room" }) { _id title } } # Delete multiple movies mutation { deleteManyMovies(query: { director: "Tommy Wiseau" }) { _id title } }
制限
GraphQL API は、特定のクエリまたはミューテーションに対して最大 10 個のリゾルバーを処理できます。1 つの操作で 10 個を超えるリゾルバを指定すると、操作全体が失敗し、エラーメッセージ
"max number of queries reached"
が表示されます。GraphQL API は、特定のクエリまたはミューテーションに対して最大深度 5 までの関係を解決できます。1 つの操作で 5 よりも深いリゾルバの関係が指定されている場合、操作全体が失敗し、エラーメッセージ
"max relationship depth exceeded"
が表示されます。GraphQL API は、コレクション スキーマがユニークなタイトルを持つことを想定しており、データモデルに重複するタイトルが含まれている場合は警告を発します。
以下の場合は、この警告を無視しても問題ありません。
タイトルの競合が埋め込みオブジェクトのみに関係する。
特定のタイトルを持つすべてのスキーマが関係を含めて同一の定義を使用する。
GraphQL API は現在、埋め込みオブジェクトの配列内のフィールドの関係をサポートしていません。カスタム リゾルバを使用すると、埋め込みオブジェクト配列の関係を手動で検索して解決できます。