型付きGraphQL
Fóirは、モデルからGraphQLスキーマを生成し、モデルごとに型付きのクエリ、ミューテーション、入力を用意します。コミットした型がプロジェクトと一致しなくなると、CLIのチェックがビルドに知らせます。
各モデルが生成するもの
レコードを保持するモデルごとに、単数のクエリ、カーソルページネーション付きのコネクションを返す複数形のクエリ、作成・更新・削除のミューテーション、型付きのフィルター、並び順、更新の入力が生成されます。公開が有効なモデルには、公開と非公開のミューテーションも加わります。フィールドはレコード型の最上位に置かれ、アンダースコアで始まるシステムフィールドと並びます。
本番のスキーマが変わるとき
スキーマは下書きと公開の2つのチャネルで提供されます。モデルを編集すると下書きが変わり、本番キーは、変更を含むリリースが行われるまで公開済みのスキーマを使い続けます。新しいモデルやオペレーションは作成時にそのままリリースされ、省略可能なフィールドを追加するだけのモデル更新も同様です。リリース後、公開スキーマはすべての利用側で数秒以内に変わります。
ビルド時のチェック
foir typesは、プロジェクトからTypeScriptの型と、型付きクライアントのセレクションを生成します。--checkを付けると何も書き込まず、コミット済みのファイルが新たな生成結果と異なる場合はゼロ以外の終了コードで終了します。CIで実行すると、プロジェクトが変わったのにコミット済みの型が更新されていない場合にビルドが失敗します。型はAPIキーごとに生成されるため、そのキーで実行できないオペレーションは存在せず、呼び出すとコンパイルエラーになります。
実行時のチェック
生成されたクライアントは、生成後にサーバーのスキーマが変わると、クライアントインスタンスごとに1回警告します。さらに、削除されたフィールドや引数など、もう提供されていないものに依存する型付き呼び出しでは、FoirSchemaDriftErrorをスローします。
型付けが及ばない範囲
生成された型では、並び順は閉じた、チェックされる型です。フィルターはunknownとして型付けされ、名前空間オペレーションの引数と結果も同様です。手書きのGraphQLは、自分で管理するビルドステップとして、スキーマに対してgraphql-codegenで型付けできます。
詳細を読む
GraphQLガイドには、モデルに対して生成されるクエリ、ミューテーション、入力と、スキーマの調べ方が載っています。