graphql/type
モジュールは、GraphQLの型とスキーマの定義を担当します。graphql/type
モジュールから、またはルートのgraphql
モジュールからインポートできます。例えば
import { GraphQLSchema } from "graphql" // ES6var { GraphQLSchema } = require("graphql") // CommonJS
スキーマ
定義
class GraphQLScalarTypeGraphQL内のスカラー型。
class GraphQLObjectTypeGraphQL内のフィールドを含むオブジェクト型。
class GraphQLInterfaceTypeGraphQL内のインターフェース型で、実装が含むフィールドを定義します。
class GraphQLUnionTypeGraphQL内のユニオン型で、実装のリストを定義します。
class GraphQLEnumTypeGraphQL内のenum型で、有効な値のリストを定義します。
class GraphQLInputObjectTypeGraphQL内の入力オブジェクト型で、構造化された入力を表現します。
class GraphQLList他の型をラップする型で、それらの型のリストを表します。
class GraphQLNonNull他の型をラップする型で、それらの型の非nullバージョンを表します。
述語
アンモディファイア
スカラー
class GraphQLSchema { constructor(config: GraphQLSchemaConfig)}
type GraphQLSchemaConfig = { query: GraphQLObjectType; mutation?: ?GraphQLObjectType;}
スキーマは、各操作タイプ(クエリとミューテーション(オプション))のルートタイプを提供することで作成されます。その後、スキーマ定義はバリデーターとエクゼキューターに提供されます。
var MyAppSchema = new GraphQLSchema({ query: MyAppQueryRootType mutation: MyAppMutationRootType});
class GraphQLScalarType<InternalType> { constructor(config: GraphQLScalarTypeConfig<InternalType>)}
type GraphQLScalarTypeConfig<InternalType> = { name: string; description?: ?string; serialize: (value: mixed) => ?InternalType; parseValue?: (value: mixed) => ?InternalType; parseLiteral?: (valueAST: Value) => ?InternalType;}
リクエストのリーフ値と引数への入力値はスカラー(またはEnum)であり、名前と有効性を保証するために使用される一連のシリアライズ関数で定義されます。
var OddType = new GraphQLScalarType({ name: "Odd", serialize: oddValue, parseValue: oddValue, parseLiteral(ast) { if (ast.kind === Kind.INT) { return oddValue(parseInt(ast.value, 10)) } return null },})
function oddValue(value) { return value % 2 === 1 ? value : null}
class GraphQLObjectType { constructor(config: GraphQLObjectTypeConfig)}
type GraphQLObjectTypeConfig = { name: string; interfaces?: GraphQLInterfacesThunk | Array<GraphQLInterfaceType>; fields: GraphQLFieldConfigMapThunk | GraphQLFieldConfigMap; isTypeOf?: (value: any, info?: GraphQLResolveInfo) => boolean; description?: ?string}
type GraphQLInterfacesThunk = () => Array<GraphQLInterfaceType>;
type GraphQLFieldConfigMapThunk = () => GraphQLFieldConfigMap;
// See below about resolver functions.type GraphQLFieldResolveFn = ( source?: any, args?: {[argName: string]: any}, context?: any, info?: GraphQLResolveInfo) => any
type GraphQLResolveInfo = { fieldName: string, fieldNodes: Array<Field>, returnType: GraphQLOutputType, parentType: GraphQLCompositeType, schema: GraphQLSchema, fragments: { [fragmentName: string]: FragmentDefinition }, rootValue: any, operation: OperationDefinition, variableValues: { [variableName: string]: any },}
type GraphQLFieldConfig = { type: GraphQLOutputType; args?: GraphQLFieldConfigArgumentMap; resolve?: GraphQLFieldResolveFn; deprecationReason?: string; description?: ?string;}
type GraphQLFieldConfigArgumentMap = { [argName: string]: GraphQLArgumentConfig;};
type GraphQLArgumentConfig = { type: GraphQLInputType; defaultValue?: any; description?: ?string;}
type GraphQLFieldConfigMap = { [fieldName: string]: GraphQLFieldConfig;};
定義するGraphQL型のほとんどはオブジェクト型になります。オブジェクト型には名前がありますが、最も重要なのはそのフィールドを記述することです。
2つの型が互いに参照する必要がある場合、または型がフィールド内で自身を参照する必要がある場合は、関数式(別名クロージャまたはサンク)を使用してフィールドを遅延的に供給できます。
リゾルバー関数には、最初のパラメーターとしてsource
オブジェクトが提供されることに注意してください。ただし、リゾルバー関数が提供されない場合は、デフォルトのリゾルバーが使用されます。これは、フィールドと同じ名前のsource
のメソッドを探します。見つかった場合、そのメソッドは(args, context, info)
で呼び出されます。これはsource
のメソッドであるため、その値は常にthis
で参照できます。
var AddressType = new GraphQLObjectType({ name: "Address", fields: { street: { type: GraphQLString }, number: { type: GraphQLInt }, formatted: { type: GraphQLString, resolve(obj) { return obj.number + " " + obj.street }, }, },})
var PersonType = new GraphQLObjectType({ name: "Person", fields: () => ({ name: { type: GraphQLString }, bestFriend: { type: PersonType }, }),})
class GraphQLInterfaceType { constructor(config: GraphQLInterfaceTypeConfig)}
type GraphQLInterfaceTypeConfig = { name: string, fields: GraphQLFieldConfigMapThunk | GraphQLFieldConfigMap, resolveType?: (value: any, info?: GraphQLResolveInfo) => ?GraphQLObjectType, description?: ?string};
フィールドが異種型のセットのいずれかを返すことができる場合、インターフェース型を使用して、可能な型、すべての型に共通するフィールド、およびフィールドが解決されたときに実際に使用される型を決定する関数を記述します。
var EntityType = new GraphQLInterfaceType({ name: "Entity", fields: { name: { type: GraphQLString }, },})
class GraphQLUnionType { constructor(config: GraphQLUnionTypeConfig)}
type GraphQLUnionTypeConfig = { name: string, types: GraphQLObjectsThunk | Array<GraphQLObjectType>, resolveType?: (value: any, info?: GraphQLResolveInfo) => ?GraphQLObjectType; description?: ?string;};
type GraphQLObjectsThunk = () => Array<GraphQLObjectType>;
フィールドが異種型のセットのいずれかを返すことができる場合、ユニオン型を使用して、可能な型と、フィールドが解決されたときに実際に使用される型を決定する関数を記述します。
var PetType = new GraphQLUnionType({ name: "Pet", types: [DogType, CatType], resolveType(value) { if (value instanceof Dog) { return DogType } if (value instanceof Cat) { return CatType } },})
class GraphQLEnumType { constructor(config: GraphQLEnumTypeConfig)}
type GraphQLEnumTypeConfig = { name: string; values: GraphQLEnumValueConfigMap; description?: ?string;}
type GraphQLEnumValueConfigMap = { [valueName: string]: GraphQLEnumValueConfig;};
type GraphQLEnumValueConfig = { value?: any; deprecationReason?: string; description?: ?string;}
type GraphQLEnumValueDefinition = { name: string; value?: any; deprecationReason?: string; description?: ?string;}
リクエストと入力値の一部であるリーフ値はEnumです。GraphQLはEnum値を文字列としてシリアライズしますが、内部的にはEnumは任意の種類の型(多くの場合整数)で表現できます。
注:定義で値が提供されていない場合、enum値の名前が内部値として使用されます。
var RGBType = new GraphQLEnumType({ name: "RGB", values: { RED: { value: 0 }, GREEN: { value: 1 }, BLUE: { value: 2 }, },})
class GraphQLInputObjectType { constructor(config: GraphQLInputObjectConfig)}
type GraphQLInputObjectConfig = { name: string; fields: GraphQLInputObjectConfigFieldMapThunk | GraphQLInputObjectConfigFieldMap; description?: ?string;}
type GraphQLInputObjectConfigFieldMapThunk = () => GraphQLInputObjectConfigFieldMap;
type GraphQLInputObjectFieldConfig = { type: GraphQLInputType; defaultValue?: any; description?: ?string;}
type GraphQLInputObjectConfigFieldMap = { [fieldName: string]: GraphQLInputObjectFieldConfig;};
type GraphQLInputObjectField = { name: string; type: GraphQLInputType; defaultValue?: any; description?: ?string;}
type GraphQLInputObjectFieldMap = { [fieldName: string]: GraphQLInputObjectField;};
入力オブジェクトは、フィールド引数に提供できるフィールドの構造化されたコレクションを定義します。
NonNull
を使用すると、クエリによって値を提供する必要が保証されます
var GeoPoint = new GraphQLInputObjectType({ name: "GeoPoint", fields: { lat: { type: new GraphQLNonNull(GraphQLFloat) }, lon: { type: new GraphQLNonNull(GraphQLFloat) }, alt: { type: GraphQLFloat, defaultValue: 0 }, },})
class GraphQLList { constructor(type: GraphQLType)}
リストは一種の型マーカーであり、別の型を指すラッピング型です。リストは、オブジェクト型のフィールドを定義するコンテキスト内で作成されることがよくあります。
var PersonType = new GraphQLObjectType({ name: "Person", fields: () => ({ parents: { type: new GraphQLList(PersonType) }, children: { type: new GraphQLList(PersonType) }, }),})
class GraphQLNonNull { constructor(type: GraphQLType)}
非nullは一種の型マーカーであり、別の型を指すラッピング型です。非null型は、その値がnullになることはなく、リクエスト中にnullが発生した場合にエラーが生成されることを保証します。これは、非null性を強く保証できるフィールド(たとえば、通常、データベース行のidフィールドはnullになることはありません)に役立ちます。
var RowType = new GraphQLObjectType({ name: "Row", fields: () => ({ id: { type: new GraphQLNonNull(String) }, }),})
function isInputType(type: ?GraphQLType): boolean
これらの型は、引数とディレクティブの入力型として使用できます。
function isOutputType(type: ?GraphQLType): boolean
これらの型は、フィールドの結果として出力型として使用できます
function isLeafType(type: ?GraphQLType): boolean
これらの型は、リーフ値になり得る型を記述できます
function isCompositeType(type: ?GraphQLType): boolean
これらの型は、選択セットの親コンテキストを記述できます
function isAbstractType(type: ?GraphQLType): boolean
これらの型は、オブジェクト型の組み合わせを記述できます
function getNullableType(type: ?GraphQLType): ?GraphQLNullableType
指定された型が非nullの場合、これは非null性を削除し、基になる型を返します。
function getNamedType(type: ?GraphQLType): ?GraphQLNamedType
指定された型が非nullまたはリストの場合、これは非null性とリストラッパーを繰り返し削除し、基になる型を返します。
var GraphQLInt: GraphQLScalarType
整数を表すGraphQLScalarType
。
var GraphQLFloat: GraphQLScalarType
浮動小数点数を表すGraphQLScalarType
。
var GraphQLString: GraphQLScalarType
文字列を表すGraphQLScalarType
。
var GraphQLBoolean: GraphQLScalarType
ブール値を表すGraphQLScalarType
。
var GraphQLID: GraphQLScalarType
IDを表すGraphQLScalarType
。