【要約】freee APIで401が出続ける。原因は /api/1/companies の先頭を使っていたことだった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がfreee APIを用いた督促ツールを開発中、アプリが連携後に無限ループに陥る問題に直面した。原因は以下の通りである。
- ・
/api/1/companiesの先頭要素を無条件に取得していた。 - ・連携権限のない事業所に対してAPIを叩き、401エラーが発生していた。
- ・エラー時に自動リダイレクトする実装により、エラー内容が隠蔽されていた。
// Approach
開発者は、APIの仕様に基づいた正確な事業所特定と、エラー情報の可視化を行うことで解決を図った。
- ・各事業所に対し、個別にAPIリクエストを試行してアクセス可否を判定するロジックを実装した。
- ・エラー時の自動リダイレクトを廃止し、エラー内容を画面に表示する設計に変更した。
- ・403エラー時はリダイレクトし、401エラー時は表示に留めるよう処理を分離した。
- ・無限ループ防止のため、403エラー時の再認可遷移に60秒の制限を設けた。
// Result
開発者は、不具合の解消と同時に、freeeの審査要件を満たす堅牢な実装を実現した。
- ・事業所選択の不整合による401エラーと、無限ループが解消された。
- ・エラー内容が可視化され、デバッグおよびユーザーへの状況伝達が可能になった。
- ・403エラー時のリダイレクト要件を維持しつつ、ループ防止策を両立させた。
Senior Engineer Insight
> APIの「一覧取得」と「個別取得」の権限差に起因するバグは、実戦で非常に厄介だ。エラーを隠蔽する自動リダイレクトは、デバッグを困難にし、運用性を著しく損なう。要件(403リダイレクト)と堅牢性(ループ防止)を、ステータスコードの分離によって両立させた判断は極めて実践的である。