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は、パフォーマンスを向上させるために、元のアプリケーション層の薄いラッパーになります。