Open1

【GraphQL】スキーマの設計 - 型定義について

yu.miyoshiyu.miyoshi

概要

GraphQLスキーマの設計についてまとめる

GraphQLスキーマの核になる型は固有のオブジェクトでアプリケーションの特性を反映する。
それぞれの型はデータに対応するフィールドを待つ。

type Photo {
  id: ID!
  name: String!
  url: String!
  description: String
}

ビックリマークはフィールドがnullにならないことを示しているので、nameやurlのフィールドには必ず何かしらの値が格納される。

GraphQLのID型は固有の識別子を格納する。JSONとhしては文字列が返されるが、Stringとは異なり値が重複しないことをバリデーションする。

スカラー型

GraphQLの組み込みのスカラー型(Int, Float, String, Boolean, ID)はとても便利だがカスタムカラーを使用することもできる。
カスタムスカラーとして定義しておけばGraphQLのサービス実装時二バリデーションの実装ができる

type Photo {
  id: ID!
  name: String!
  url: String!
  description: String
  created: Datetime!
}

Datetimeというカスタムスカラー型を定義し、正しいフォーマットになっているかバリデーションできる。

ENUM

あらかじめ定められた特定の文字列のひとつを返すスカラー型。
選択肢のうちのひとつの値を返すようんあフィールドを実装したいときにenum型を使用する。

enum PhotoCategory {
  SELFIE
  PORTRAIT
  ACTION
  LANDSCAPE
  GRAPHIC
}

列挙型をフィールドに追加することもできる。
Photoにcategoryフィールドを追加すると以下のようになる。

type Photo {
  id: ID!
  name: String!
  url: String!
  description: String
  created: Datetime!
  category: PhotoCategory!
}

自分のサービス実装時には、categoryはenumで定められた5つの値のみを返すことを保証しなければならない。

参考サイト

初めてのGraphQL