-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Description
緊急度
高
症状
タイピングゲームをプレイするとスコア登録する場面で必ずエラーになり,そこから前の画面に戻るのも先の画面に進むのもできません.ユーザには「スコアの登録に失敗しました」というトーストが表示されます.コンソールには下記エラーが出ています.
Score submission error: SyntaxError: Unexpected token 'ス', "スコアが正常に登録されました" is not valid JSON
再現手順
- typing-server(以下,バックエンド)を立ち上げる
cd typing-server && docker compose -f docker-compose.dev.yml up - 別の端末でtyping-app(以下,フロントエンド)を立ち上げる
cd typing-app && yarn && yarn dev http://localhost:3000から00000001にログインして/gameへ遷移,実際にプレイする- 1分(プレイ終了)後に当症状発生
考えられる原因
- 直接の原因はフロントエンドが使用している openapi-fetch (バージョン0.13.3) というライブラリがデフォルトでレスポンスを JSON.parse しようとすることです
- スコアの登録を担当する
/scoresエンドポイントではレスポンスボディが「スコアが正常に登録されました」という文字列1であり JSON じゃないので上記のようなエラーが出ます
この issue で検討したいこと
問題に対しては改善案が2つあり(他の案も歓迎!),そのどちらを採用するか検討したい.
- 案1 サーバとopenapi.yamlの修正
- レスポンスボディの形式を統一
- or いっそ何も返さないか
- 案2 クライアントが openapi.yaml の仕様に沿うように修正
/scoresエンドポイントのときだけただのテキストとして解釈する- or すべてのエンドポイントで JSON のパースをやめる
案1はレスポンスボディがエンドポイントによって違うのは煩雑だ,という意見に依拠する案.案1のポチ2つ目の裏話としては,昨年新入生に使ってもらったときはそんなエラー起きてなかったのになーと思って調べたら実は昨年のv0.0.2のあたりまではサーバはスコアを登録した際にステータスコード201を返すのみだったので問題は起きていなかったという事実があります(なんてことorz).その頃に戻せばいいんじゃない?という発想です(再発しそう?).
案2はクライアントが openapi.yaml の仕様に沿って適切に処理するべき,という意見に立脚した案です.その2つ目は「いっそ何も返さない」,に似てて「いっそ何もパースしない」ということです.パースしたけりゃ明示的にせい,という立場.