第6章. 依存関係
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
プレビュー
FastAPI の非常に優れた設計機能の 1 つに、依存性注入と呼ばれるテクニックがあります。 この用語は技術的で難解に聞こえますが、FastAPI の重要な側面であり、驚くほど多くのレベルで役立ちます。 この章では、FastAPI の組み込み機能と独自の機能を記述する方法について説明します。
依存とは何か?
依存関係とは、ある時点で必要となる特定の情報のことである。この情報を得るための通常の方法は、必要なときにその情報を得るコードを書くことである。
ウェブサービスを書くとき、次のようなことが必要になるかもしれない:
-
HTTPリクエストから入力パラメータを収集する。
-
入力を検証する
-
エンドポイントのユーザ認証認可をチェックする。
-
データソース(多くの場合データベース)からデータを検索する。
-
メトリック、ログ、またはトラッキング情報を発信する
ウェブ・フレームワークはHTTPリクエスト・バイトをデータ構造に変換し、ウェブ・レイヤーの関数内で必要なものを抜き出す。
依存関係の問題
、必要なときに必要なものを、外部のコードに知られることなく手に入れることは、とても合理的なことのように思える。 しかし、結果は存在することがわかった:
- テスト
-
関数のバリエーションをテストすることはできないので、依存関係を異なる方法で検索する可能性がある。
- 隠れた依存関係
-
詳細を隠すということは、外部コードが変更されたときに、その関数が必要とするコードが破壊的に変更される可能性があるということだ。
- コード重複
-
依存関係が一般的なもの(データベース内のユーザを検索したり、HTTPリクエストの値を組み合わせたりするようなもの)である場合、複数の関数に検索コードを重複させることができる。
- OpenAPI可視性
-
FastAPIが作成する自動テストページは、依存性注入メカニズムからの情報を必要とする。
依存性の注入
依存性注入(dependency injection)という用語は、響きよりも単純で、関数が必要とする特定の情報を関数に渡すことである。 これを行う伝統的な方法は、ヘルパー関数を渡し、そのヘルパー関数を呼び出して特定のデータを取得することである。
FastAPI の依存関係
FastAPI さらにもう一歩進んで、関数の引数として依存関係を定義することができ、それらは FastAPIによって自動的に呼び出され、それらが返す値を渡す。 例えば、user_dep 依存関係は、HTTP引数からユーザの名前とパスワードを取得し、データベースでそれらをルックアップし、その後そのユーザを追跡するために使用するトークンを返すことができる。Web処理関数はこれを直接呼び出すことはなく、関数呼び出し時に処理される。
Path 、Query 、Body 、Header のようなHTTPデータソースである。 これらは関数やPythonクラスで、HTTPリクエストの様々な領域からリクエストされたデータを掘り起こす。 これらは、妥当性チェックやデータ形式のような詳細を隠す。
そのための関数を自作するのはどうだろう? できるかもしれないが、このようなものはないだろう:
-
データの妥当性チェック
-
形式変換
-
自動ドキュメンテーション
FastAPIとFlaskやDjangoのようなPythonウェブフレームワークを比較する ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access