GraphQL-スキーマ

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

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

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

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
});

シニア番号 パラメータと説明
1

typeDefs

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

2

Resolvers

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

3

logger

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

4

parseOptions

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

5

allowUndefinedInResolve

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

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つのフィールドがあります。Studentは複数のフィールドを含むため、オブジェクトタイプとして宣言されます。IDフィールドはNULL不可として宣言されています。

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

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

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

module.exports = {Query}

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

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

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

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

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

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

Note−students.jsonをRESTfulAPI呼び出しに置き換えて、学生データ、またはMySQLやMongoDBなどの実際のデータベースを取得できます。GraphQLは、パフォーマンスを向上させるために、元のアプリケーション層の薄いラッパーになります。