Graphql-schema

提供:Dev Guides
移動先:案内検索

GraphQL-スキーマ

GraphQLスキーマは、GraphQLサーバー実装の中核です。 接続するクライアントアプリケーションで使用可能な機能について説明します。 任意のプログラミング言語を使用して、GraphQLスキーマを作成し、その周りのインターフェイスを構築できます。

GraphQLランタイムは、一般的なグラフベースのスキーマを定義して、それが表すデータサービスの機能を公開します。 クライアントアプリケーションは、その機能内でスキーマを照会できます。 このアプローチにより、クライアントはサーバーから切り離され、独立して進化と拡張の両方が可能になります。

この章では、Apolloサーバーを使用してGraphQLクエリを実行します。 graphql-toolsの makeExecutableSchema 関数は、スキーマとリゾルバーをバインドするのに役立ちます。

makeExecutableSchema関数の構文

*makeExecutableSchema* 関数は、オブジェクト型の単一の引数\ {}を取ります。 この関数を使用するための構文は以下のとおりです-
import { makeExecutableSchema } from 'graphql-tools';

const jsSchema = makeExecutableSchema({
   typeDefs,
   resolvers,//optional
   logger,//optional
   allowUndefinedInResolve = false,//optional
   resolverValidationOptions = {},//optional
   directiveResolvers = null,//optional
   schemaDirectives = null, //optional
   parseOptions = {}, //optional
   inheritResolversFromInterfaces = false //optional
});
Sr.No. Parameter & Description
1

typeDefs

これは必須の引数です。 GraphQLクエリをUTF-8文字列として表します。

2

Resolvers

これはオプションの引数です(デフォルトでは空のオブジェクト)。 これには、クエリを処理する関数があります。

3

logger

これはオプションの引数であり、エラーをサーバーコンソールに出力するために使用できます。

4

parseOptions

これはオプションの引数であり、typeDefsを文字列として指定するときに解析をカスタマイズできます。

5

allowUndefinedInResolve

これはデフォルトで当てはまります。 falseに設定すると、resolve関数が未定義を返す場合にエラーをスローします。

6

resolverValidationOptions

これはオプションの引数であり、ブールプロパティを持つオブジェクトを受け入れます。

7

inheritResolversFromInterfaces

これはオプションの引数であり、ブール引数を受け入れてリゾルバオブジェクトの継承を確認します。

このスキーマを理解するための簡単なアプリケーションを作成しましょう。 これにより、サーバーから生徒のリストを照会するためのスキーマが作成されます。 学生データはフラットファイルに保存され、 notarealdb というノードモジュールを使用してデータベースを偽造し、フラットファイルから読み取ります。

ステップ1-プロジェクトに必要な依存関係をダウンロードしてインストールする

*schema-app* という名前のフォルダーを作成します。 ターミナルからディレクトリをschema-appに変更します。 次に、環境設定の章で説明されているステップ3から5に従って、ダウンロードとインストールプロセスを完了します。

ステップ2-スキーマを作成する

プロジェクトフォルダに schema.graphql ファイル、 schema-app を追加し、次のコードを追加します-

type Query {
   greeting:String
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

スキーマのルートはクエリタイプになります。 クエリには、挨拶と、それぞれ文字列と生徒のリストを返す生徒の2つのフィールドがあります。 学生は複数のフィールドを含むため、オブジェクト型として宣言されます。 IDフィールドは、null不可として宣言されています。

ステップ3-リゾルバーを作成する

プロジェクトフォルダにファイル resolvers.js を作成し、次のコードを追加します-

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  finddevguides !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

ここで、挨拶と生徒はクエリを処理するリゾルバです。 * students resolver関数*は、データアクセスレイヤーから学生のリストを返します。 モジュール外のリゾルバー関数にアクセスするには、 module.exports を使用してQueryオブジェクトをエクスポートする必要があります。

ステップ4-アプリケーションを実行する

server.jsファイルを作成し、環境設定の章のステップ8を参照してください。 次のステップは、ターミナルでコマンドnpm startを実行することです。 サーバーは9000ポートで稼働します。 ここでは、GraphiQLをクライアントとして使用して、アプリケーションをテストします。 ブラウザーを開き、URL http://localhost:9000/graphiql を入力します。

エディタで次のクエリを入力します-

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

クエリは、次のように出力を表示します-

クエリ出力

-student.jsonをRESTful API呼び出しに置き換えて、学生データまたはMySQLやMongoDBなどの実際のデータベースを取得することもできます。 GraphQLは、パフォーマンスを改善するために元のアプリケーションレイヤーの薄いラッパーになります。