Docs Menu
Docs Home
/ /
Atlas App Services
/

Atlas GraphQL API

クライアントアプリケーションは 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 は、クライアント アプリケーション向けの宣言型の厳密に型指定されたクエリ言語です。クライアントは、必要なデータの形状と内容を1回のリクエストで正確に定義できるため、オーバーフェッチの問題がなくなり、コストのかかるサーバーへの複数のラウンドトリップが不要になります。

GraphQLについて詳しくは、公式のGraphQLチュートリアル を参照してください。

App Services を使用して、MongoDB コレクションの JSON スキーマから GraphQL スキーマとリゾルバを生成します。これは、GraphQL スキーマ開発における従来のコード ファーストやスキーマ ファーストのアプローチとは異なります。

App Services を使用して GraphQL スキーマを定義する方法

  1. お使いの MongoDB Atlas クラスターの MongoDB コレクション用に JSON schema を定義します。カスタム定義に基づいてコレクション スキーマの形状を適用することも、コレクション内のドキュメントに基づいて生成されたスキーマを使用することもできます。

  2. コレクション JSON schema に基づいて GraphQL スキーマとリゾルバを生成します。

  3. オプションで、生成される 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 は現在、埋め込みオブジェクトの配列内のフィールドの関係をサポートしていません。カスタム リゾルバを使用すると、埋め込みオブジェクト配列の関係を手動で検索して解決できます。

戻る

共有された階層クラスターのアップグレード

項目一覧