FastAPI
始めに 小ネタ。 FastAPIからopenapi.jsonが出力できるなら、フロントエンドで使用する型定義まで出力する手順を確立したくて記事にします。 なお、フロントエンドはすでに構築されていたこともあり、自動生成した型定義の導入までは行えていません。また、F…
始めに ※ 結果的に言えばどうにもできなかった話です。 検証環境へのデプロイが通常なら10分程度で終わるはずなのに、最悪のパターンだと30分くらいかかるようになりました。原因を追っていくと、どうやらFastAPIが起動時にメモリを大量消費していることがわ…
始めに FastAPIはデフォルトではJSONResponseを使用してレスポンスします。FastAPI公式ヘルプにはパフォーマンスを向上させるためにORJSONResponseの使用を提案するページがあります。 fastapi[all]にorjsonが含まれていることもあり、ORJSONResponseを使用…
始めに FastAPIにてメソッドやクラスをDIできますが、DI時に部分的に処理を差し替えたい時があります。その時にパラメータを渡せば処理を差し替えられますが、少々ハマったのでそれをブログにします。 環境 Python 3.12.4 FastAPI 0.112.0 実装 同期処理の場…
始めに FastAPIではHTTPExceptionを使用すればHttpStatusを200以外でも返却可能です。しかし、エラー詳細は1つしか返却できません。ファイルのエラーハンドリングでは多数のエラーが発生した場合には、複数のエラーを返却したいユースケースがあります。 Exc…
例えばDBで論理削除しているユーザを画面上で表示する際に「削除済ユーザ」と表示したい。PythonのSQLAlchemyであれば、画面上の表示は「削除済ユーザ」としつつ、DBの値は元の「きり丸」としておくことが可能です。 今回の記事では、SQLAlchemyを使用してア…
FastAPIでHTTPExceptionをログに出力しようとした時のメモ。 環境 Python 3.12.3 FastAPI 0.103.1 0.110.0 対応 少し古いFastAPIのライブラリなら、reprを使用してシリアライズしてください。もし、strで検証しても空文字列でなければ、そのままでも問題あり…
FastAPIで意図しないエラーが発生したときにExceptionでハンドリングしていましたが、それだけではpydanticで発生するエラーがキャッチできなかったのでメモします。 なお、pydanticはAPIのRequestとResponseのモデルで使用していますので、フロントのバリデ…
PythonのFastAPIのStreamingResponseでGeneratorを使用しながら、UTF-8 BOMのファイルをダウンロードさせるAPIを作成しました。ただ、作成したファイルを確認したところ、ファイルの途中で余計なBOM(\ufeff)が付与されてしまっていました。 今回の記事では…