Graphql-type-system
GraphQL-タイプシステム
GraphQLは強く型付けされた言語です。 型システムは、GraphQLアプリケーションで使用できるさまざまなデータ型を定義します。 型システムは、クライアントとサーバー間の契約であるスキーマの定義に役立ちます。 一般的に使用されるGraphQLデータ型は次のとおりです-
Sr.No. | Types & Description |
---|---|
1 |
Scalar 単一の値を格納します |
2 |
Object 取得できるオブジェクトの種類を示します |
3 |
Query 他の特定のタイプへのエントリポイントタイプ |
4 |
Mutation データ操作のエントリポイント |
5 |
Enum ユーザーが所定のオプションリストから選択する必要がある状況で役立ちます。 |
スカラー型
スカラー型は、単一の値のみを格納できるプリミティブデータ型です。 GraphQLが提供するデフォルトのスカラー型は-
- Int -符号付き32ビット整数
- Float -符号付きの倍精度浮動小数点値
- String -UTF-8文字のシーケンス
- ブール-真または偽
- ID -一意の識別子。多くの場合、オブジェクトを取得するための一意の識別子として、またはキャッシュのキーとして使用されます。
スカラー型を定義するための構文は次のとおりです-
field: data_type
以下のスニペットは、string値を返すgreetingという名前のフィールドを定義しています。
greeting: String
オブジェクトタイプ
オブジェクトタイプは、スキーマで使用される最も一般的なタイプであり、フィールドのグループを表します。 オブジェクトタイプ内の各フィールドは別のタイプにマップされるため、ネストされたタイプが許可されます。 つまり、オブジェクト型は複数のスカラー型またはオブジェクト型で構成されます。
オブジェクトタイプを定義するための構文は次のとおりです-
type object_type_name
{
field1: data_type
field2:data_type
....
fieldn:data_type
}
あなたは次のコードスニペットを考慮することができます-
--Define an object type--
type Student {
stud_id:ID
firstname: String
age: Int
score:Float
}
--Defining a GraphQL schema--
type Query
{
stud_details:[Student]
}
上記の例では、オブジェクトデータ型Studentを定義しています。 ルートQueryスキーマの_stud_details_フィールドは、Studentオブジェクトのリストを返します。
クエリタイプ
GraphQLクエリを使用してデータを取得します。 RESTベースのAPIでリソースを要求するようなものです。 簡単にするために、クエリタイプはクライアントアプリケーションからGraphQLサーバーに送信されるリクエストです。 GraphQLは、*スキーマ定義言語(SDL)*を使用してクエリを定義します。 クエリタイプは、GraphQLの多くのルートレベルタイプの1つです。
クエリを定義するための構文は以下のとおりです-
type Query {
field1: data_type
field2:data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
クエリを定義する例-
type Query {
greeting: String
}
変異タイプ
突然変異は、データを作成、更新、または削除するためにサーバーに送信される操作です。 これらは、RESTベースのAPIを呼び出すPUT、POST、PATCHおよびDELETE動詞に類似しています。
突然変異は、GraphQLのルートレベルのデータ型の1つです。 Queryタイプはデータ取得操作のエントリポイントを定義し、Mutationタイプはデータ操作操作のエントリポイントを指定します。
突然変異の種類を定義するための構文は以下のとおりです-
type Mutation {
field1: data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
たとえば、次のように突然変異のタイプを定義して新しい生徒を追加できます-
type Mutation {
addStudent(firstName: String, lastName: String): Student
}
列挙型
Enumはスカラー型に似ています。 列挙型は、フィールドの値が所定のオプションリストからのものでなければならない状況で役立ちます。
列挙型を定義するための構文は次のとおりです-
type enum_name{
value1
value2
}
次のスニペットは、列挙型を定義する方法を示しています-
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
リストタイプ
リストを使用して、特定のタイプの値の配列を表すことができます。 リストは、オブジェクト型、スカラー、および列挙型をラップする型修飾子[]で定義されます。
次の構文は、リストタイプを定義するために使用することができます-
field:[data_type]
以下の例では、リストタイプのtodosを定義しています-
type Query {
todos: [String]
}
Null不可タイプ
デフォルトでは、各コアスカラータイプをnullに設定できます。 つまり、これらの型は指定された型の値を返すか、値を持たないかのいずれかです。 このデフォルトをオーバーライドし、フィールドを定義する必要があることを指定するには、感嘆符(!)をタイプに追加できます。 これにより、クエリによって返される結果に値が存在することが保証されます。
次の構文を使用して、null不可フィールドを定義できます-
field:data_type!
以下の例では、_stud_id_が必須フィールドとして宣言されています。
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}