コレクション内のデータの公開
Overview
Atlas GraphQL API を介して、MongoDB コレクションのデータをクライアント アプリケーションに公開できます。 Atlas App Services は、コレクション スキーマに基づいて GraphQL の型とリゾルバを自動的に生成し、すべての GraphQL 操作に対してコレクション ルールを強制します。
手順
1. コレクションのロールを設定する
App Services はすべての受信 GraphQL リクエストに対してコレクション ルールを強制するため、アプリケーションに必要な権限を持つ少なくとも 1 つのコレクション ロールを定義する必要があります。
すべての GraphQL リクエストには、リクエストを送信したログイン App Services ユーザーを識別する認証トークンが含まれています。 App Services は、GraphQL 操作に含まれるすべてのドキュメントに対してロールを評価し、ユーザーが表示権限を持つフィールドとドキュメントのみを返します。 App Services がフィールドを省略した場合、返されるドキュメントのフィールドには null
値が含まれます。
2. コレクション内のドキュメントのスキーマを定義する
GraphQL では、すべてのデータが明確に定義された型に準拠している必要があるため、コレクション内のドキュメントにはスキーマを定義および強制 する必要があります。 App Services は、コレクション スキーマに基づいてコレクション内のドキュメントのGraphQL 型とリゾルバを自動的に生成し、スキーマが変更されるたびに新しい型を再生成します。
注意
スキーマの自動生成
App Services は、コレクション内の既存のドキュメントのサンプルに基づいて、コレクション スキーマを生成できます。 既存のデータがない場合は、スキーマに含めるフィールドをモック実装した新しいドキュメントを挿入し、そのモックに基づいてスキーマを生成できます。
3. 他のコレクションとの関係を定義する
コレクション内の各ドキュメントを外部コレクション内の 1 つ以上のドキュメントに接続する関係を定義できます。 関係を定義する方法については、「 関係の定義 」を参照してください。
関係により、GraphQL の読み取りおよび書込み操作において関連するドキュメントをスムーズに参照およびクエリできます。 たとえば、人物をクエリし、同じpeople
コレクションから各人の完全なドキュメントを含めることができます。
query { person(query: { name: "Molly Weasley" }) { _id name age picture children { _id name age picture } } }
4. データ型に名前を付ける
Atlas App Services は、コレクション内のドキュメントが準拠するデータ型に基づいて、生成する GraphQL 型に名前を付けます。 GraphQL 型の名前を構成するには、スキーマのtitle
フィールドを、スキーマが定義するデータ型の名前に設定します。
title
フィールドを設定できる状況は 3 つあります。
スキーマのルートレベルで
title
を設定することで、コレクション内の各ドキュメントのタイプ名を定義できます。 タイトルを指定しない場合、App Services は代わりにコレクションの名前を使用します。埋め込みオブジェクト スキーマで
title
を設定することで、埋め込みオブジェクトのタイプ名を定義できます。フィールド スキーマで
title
を設定することで、定義された関係を持つフィールドのタイプ名を定義できます。 App Services は、GraphQL の 関係 を解決するときに、定義されたフィールド名ではなくtitle
を使用します。
{ "title": "movie", "properties": { "_id": { "bsonType": "objectId" }, "title": { "bsonType": "string" }, "year": { "bsonType": "int" }, "director": { "bsonType": "int" } } }
注意
単数形と複数形の型
Atlas App Services は、次のようにコレクションごとに 2 つのGraphQL クエリを生成します。
コレクション内のドキュメントを検索する単数形クエリ。 クエリでは、スキーマの
title
と同じ名前が使用されます。 スキーマのtitle
が複数形の名ます。App Services は、 Rails ActiveSupport 影響ルールによって決定された単数形を使用しようとします。コレクション内のすべての文書のサブセットを検索する複数形クエリ。 可能であれば、クエリでは単数形のクエリ名の複数形が使用されます。 App Services が名前を複数形にできない場合、または複数形の名前が単数形の名前と同じである場合、複数形のクエリは、単数形のクエリと同じ名前を使用し、末尾に
"s"
が追加されます。
例
次のスキーマは、 laboratory.mice
コレクションに構成されています。
{ "title": "Mouse", "bsonType": "object", "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "age": { "bsonType": "int" } } }
App Services は、 スキーマに基づいて、 mouse
(単数形)とmice
(複数形)の 2 つのクエリを生成します。
query Mice { mouse(query: { _id: "5ebe6819197003ddb1f74475" }) { name age } mice { name age } }
次のステップ
コレクションのスキーマを定義すると、App Services は GraphQL API を通じてコレクション内のドキュメントを自動的に公開します。 クライアント アプリケーションから接続し、クエリとミューテーションを実行できるようになりました。