-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Description
現在、 #149 の内容でエラーハンドリングをしているが、クライアント側でエラーの内容を検知することができない。
例えば、 NotFoundException と ShoppingException の違いを検知できない。
結果として、それぞれ同じエラー画面が表示されてしまう。
エラーの内容ごとに、別々のエラー画面を表示させるため、エラーハンドリングを改善したい
案1) Category の 分類を増やす
現在、 Category 列挙型には以下が定義されている
- Global
- FormValidation
当初、画面全体に対するエラーか、フォームの各属性に対するエラーかを判断するために作成したが、エラーの種類を分類する用途へ変更する。
例えば、以下のように NotFound を増やすことによって、 Global と NotFound を別のエラー画面にすることができる
- Global
- FormValidation
- NotFound
メリット
- シンプルである
デメリット
- プラグイン等での拡張が難しそう
- 柔軟性に欠ける
案2) data の結果として error を返す
以下の記事にあるように、 union 型を利用して、 data の結果として error を返す。
- https://inigo.io/blog/graphql_error_handling/#Treating%20errors%20as%20data
- https://indigolain.hatenablog.com/entry/2020/12/06/065823
例えば、 Product の Query の結果は以下のような Schema となる
union ProductResult = Product | NotFoundクライアント側では上記の結果に応じて、商品詳細画面を表示するか、NotFound エラー画面を表示するか制御することができる。
メリット
- 柔軟に定義できる
デメリット
- 柔軟であるがゆえ、大規模になると煩雑になりそう
- 実装が複雑になりそう
ysaito8015
Metadata
Metadata
Assignees
Labels
No labels