GraphQL ロゴGraphQL

graphql/type

graphql/typeモジュールは、GraphQLの型とスキーマの定義を担当します。graphql/typeモジュールから、またはルートのgraphqlモジュールからインポートできます。例えば

import { GraphQLSchema } from "graphql" // ES6
var { GraphQLSchema } = require("graphql") // CommonJS

概要#

スキーマ

定義

述語

アンモディファイア

スカラー

スキーマ#

GraphQLSchema#

class GraphQLSchema {
constructor(config: GraphQLSchemaConfig)
}
type GraphQLSchemaConfig = {
query: GraphQLObjectType;
mutation?: ?GraphQLObjectType;
}

スキーマは、各操作タイプ(クエリとミューテーション(オプション))のルートタイプを提供することで作成されます。その後、スキーマ定義はバリデーターとエクゼキューターに提供されます。

#

var MyAppSchema = new GraphQLSchema({
query: MyAppQueryRootType
mutation: MyAppMutationRootType
});

定義#

GraphQLScalarType#

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
}

GraphQLObjectType#

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

GraphQLInterfaceType#

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

GraphQLUnionType#

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

GraphQLEnumType#

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

GraphQLInputObjectType#

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

GraphQLList#

class GraphQLList {
constructor(type: GraphQLType)
}

リストは一種の型マーカーであり、別の型を指すラッピング型です。リストは、オブジェクト型のフィールドを定義するコンテキスト内で作成されることがよくあります。

#

var PersonType = new GraphQLObjectType({
name: "Person",
fields: () => ({
parents: { type: new GraphQLList(PersonType) },
children: { type: new GraphQLList(PersonType) },
}),
})

GraphQLNonNull#

class GraphQLNonNull {
constructor(type: GraphQLType)
}

非nullは一種の型マーカーであり、別の型を指すラッピング型です。非null型は、その値がnullになることはなく、リクエスト中にnullが発生した場合にエラーが生成されることを保証します。これは、非null性を強く保証できるフィールド(たとえば、通常、データベース行のidフィールドはnullになることはありません)に役立ちます。

#

var RowType = new GraphQLObjectType({
name: "Row",
fields: () => ({
id: { type: new GraphQLNonNull(String) },
}),
})

述語#

isInputType#

function isInputType(type: ?GraphQLType): boolean

これらの型は、引数とディレクティブの入力型として使用できます。

isOutputType#

function isOutputType(type: ?GraphQLType): boolean

これらの型は、フィールドの結果として出力型として使用できます

isLeafType#

function isLeafType(type: ?GraphQLType): boolean

これらの型は、リーフ値になり得る型を記述できます

isCompositeType#

function isCompositeType(type: ?GraphQLType): boolean

これらの型は、選択セットの親コンテキストを記述できます

isAbstractType#

function isAbstractType(type: ?GraphQLType): boolean

これらの型は、オブジェクト型の組み合わせを記述できます

アンモディファイア#

getNullableType#

function getNullableType(type: ?GraphQLType): ?GraphQLNullableType

指定された型が非nullの場合、これは非null性を削除し、基になる型を返します。

getNamedType#

function getNamedType(type: ?GraphQLType): ?GraphQLNamedType

指定された型が非nullまたはリストの場合、これは非null性とリストラッパーを繰り返し削除し、基になる型を返します。

スカラー#

GraphQLInt#

var GraphQLInt: GraphQLScalarType

整数を表すGraphQLScalarType

GraphQLFloat#

var GraphQLFloat: GraphQLScalarType

浮動小数点数を表すGraphQLScalarType

GraphQLString#

var GraphQLString: GraphQLScalarType

文字列を表すGraphQLScalarType

GraphQLBoolean#

var GraphQLBoolean: GraphQLScalarType

ブール値を表すGraphQLScalarType

GraphQLID#

var GraphQLID: GraphQLScalarType

IDを表すGraphQLScalarType

続きを読む →graphql/utilities