この API は、指定された n 番目のフィボナッチ数を返す機能を提供します。
https://fib-api-0jyy.onrender.com/fib?n=99
- Go (Gin)
クリーンアーキテクチャを採用し、保守運用性や、変更容易性の高い構成にした。
main.go
: アプリケーションのエントリーポイントで、依存関係の注入と API サーバーの起動を行う。router.go
: エンドポイントのルーティングを行う。controller.go
: HTTP リクエストを処理してバリデーションを行い、適切なレスポンスを返すコントローラが含まれている。usecase.go
: ビジネスロジック(この場合はフィボナッチ数の計算アルゴリズム)を実装するユースケースが含まれている。_test.go
: 各 package のユニットテストが含まれている。_mock.go
: 各 package のモックが含まれている。
機能 | メソッド | パス | クエリ |
---|---|---|---|
フィボナッチ数の取得 | GET | /fib | n |
リクエスト
https://sample.com/fib?n=99
レスポンス
{
"result": "218922995834555169026"
}
ステータスコード
200
リクエスト
https://sample.com/fib?n=abc
https://sample.com/fib?n=3.14
レスポンス
{
"message": "Invalid parameter (not integer)"
}
ステータスコード
400
リクエスト
https://sample.com/fib?n=-1
レスポンス
{
"message": "Invalid parameter (not natural number)"
}
ステータスコード
400
- 動的計画法を用いたフィボナッチ数の計算アルゴリズムを採用し、再帰だと O(2^n)かかる計算量を O(n)に抑えた。
- big.Int 型でフィボナッチ数を管理することにより、Go の uint 型のオーバーフロー対策をした。
- HTTP レスポンスの型を定義し、予期しないレスポンスを返さないようにした。
- エラー時のメッセージを定数で定義することにより、開発時のタイポを防止した。
- 適切なモック化と依存性の注入をすることで、完全に独立したユニットテストを記述した(100% coverage)。
- レスポンスのresultをjsonのNumber型で返したい(大きな自然数で実現可能かはわからない)
- タイムアウトを設けてエラーを返す処理を追加してもよかったかも