Closed purplesmoke05 closed 2 years ago
Close #877
リクエスト処理内で使用されていたvalidation関数を、Pydanticモデルに置き換えました。 GETリクエストの際のクエリパラメータについても、可能な限りPydanticスキーマでValidationを行っています。 ただし、モデル内のリストをパースすることが出来ないため、リストの引数についてはQueryを使用しています。
Pydantic
dex_order_list.py
position.py
Validation以外のロジックは、従来のものをそのまま流用するようにしています。 継承クラスを使用して実装されていたビジネスロジック(dex_order_list.py/position.py)については、若干回りくどい方法ですがDepends()を用いて流用するよう実装しています。
正常系のレスポンスについては、全て既存と同様のスキーマで返却するよう実装しています。 異常系のレスポンスについては、エラーオブジェクトのリファクタリングを行いました。 エラーオブジェクトは、「ステータスコード・エラーコード・メッセージ」を必ず含みます。 追加の説明がある場合は「説明」に値が格納されます。 これらオブジェクトを元にレスポンスモデルを生成するよう実装しています。 異常系の内、スキーマ内でのバリデーションエラーについては、従来と同様ステータスコードを400としました。 (FastAPI本来のステータスコードは422です。) ロジック内でのパラメータエラーと明示的に分けています。
session_manager.py
translator.py
Content-Type=application/json
不要となった以下の既存ミドルウェアを廃止しました。 session_manager.py FastAPIのDependency InjectionによりミドルウェアでのDB sessionの提供が不要となったため。 translator.py Content-Type=application/jsonの際のリクエストボディからのデータパースがFastAPIで提供され不要となったため。
response_logger.py
以下のミドルウェアを改修しました。 response_logger.py 従来のミドルウェアをFastAPI向けに改修しました。出力イメージは以下です。
[2022-08-30 01:09:44 +0000] [212] [INFO] [ACCESS-LOG] GET /Notifications?notification_type=CancelTransfer&offset=0&limit=100 200 (0.00406sec) [2022-08-30 01:09:54 +0000] [212] [INFO] [ACCESS-LOG] GET /Token/StraightBond/Addresses 200 (0.009836sec) [2022-08-30 01:09:54 +0000] [212] [INFO] [ACCESS-LOG] GET /Token/Share/Addresses 200 (0.004725sec)
strip_trailing_slash.py
以下のミドルウェアを追加しました。 strip_trailing_slash.py FastAPIではURL末尾にスラッシュを付けた場合リダイレクトが行われます。リダイレクト時にはステータスコードが307となり、これを避けるためのものです。
Close #877
Changes
1. Requests
2. Business Logic
dex_order_list.py
/position.py
) is implemented using Depends in a slightly roundabout way.3. Responses
4. Middlewares
session_manager.py
translator.py
Content-Type=application/json
is no longer necessary because FastAPI provides it.response_logger.py
strip_trailing_slash.py
TODO