EC-CUBE / EC-CUBE/eccube-api4

エラーハンドリングの改善

Open
#161 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
PHP
Stars
9
Forks
18
PR merge metrics
No merged PRs in 30d

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 となる

```graphql
union ProductResult = Product | NotFound
```

クライアント側では上記の結果に応じて、商品詳細画面を表示するか、NotFound エラー画面を表示するか制御することができる。

### メリット

- 柔軟に定義できる

### デメリット

- 柔軟であるがゆえ、大規模になると煩雑になりそう
- 実装が複雑になりそう

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.