Graphql-schema
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は、パフォーマンスを改善するために元のアプリケーションレイヤーの薄いラッパーになります。