You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.1 KiB

パスパラメータと数値の検証

クエリパラメータに対してQueryでより多くのバリデーションとメタデータを宣言できるのと同じように、パスパラメータに対してもPathで同じ種類のバリデーションとメタデータを宣言することができます。

Pathのインポート

まず初めに、fastapiからPathをインポートします:

{!../../../docs_src/path_params_numeric_validations/tutorial001.py!}

メタデータの宣言

パラメータはQueryと同じものを宣言することができます。

例えば、パスパラメータitem_idに対してtitleのメタデータを宣言するには以下のようにします:

{!../../../docs_src/path_params_numeric_validations/tutorial001.py!}

!!! note "備考" パスの一部でなければならないので、パスパラメータは常に必須です。

そのため、`...`を使用して必須と示す必要があります。

それでも、`None`で宣言しても、デフォルト値を設定しても、何の影響もなく、常に必要とされていることに変わりはありません。

必要に応じてパラメータを並び替える

クエリパラメータqを必須のstrとして宣言したいとしましょう。

また、このパラメータには何も宣言する必要がないので、Queryを使う必要はありません。

しかし、パスパラメータitem_idのためにPathを使用する必要があります。

Pythonは「デフォルト」を持たない値の前に「デフォルト」を持つ値を置くことができません。

しかし、それらを並び替えることができ、デフォルト値を持たない値(クエリパラメータq)を最初に持つことができます。

FastAPIでは関係ありません。パラメータは名前、型、デフォルトの宣言(QueryPathなど)で検出され、順番は気にしません。

そのため、以下のように関数を宣言することができます:

{!../../../docs_src/path_params_numeric_validations/tutorial002.py!}

必要に応じてパラメータを並び替えるトリック

クエリパラメータqQueryやデフォルト値なしで宣言し、パスパラメータitem_idPathを用いて宣言し、それらを別の順番に並びたい場合、Pythonには少し特殊な構文が用意されています。

関数の最初のパラメータとして*を渡します。

Pythonはその*で何かをすることはありませんが、それ以降のすべてのパラメータがキーワード引数(キーと値のペア)として呼ばれるべきものであると知っているでしょう。それはkwargsとしても知られています。たとえデフォルト値がなくても。

{!../../../docs_src/path_params_numeric_validations/tutorial003.py!}

数値の検証: 以上

QueryPath(、そして後述する他のもの)を用いて、文字列の制約を宣言することができますが、数値の制約も同様に宣言できます。

ここで、ge=1の場合、item_idは1「より大きいgか、同じe」整数でなれけばなりません。

{!../../../docs_src/path_params_numeric_validations/tutorial004.py!}

数値の検証: より大きいと小なりイコール

以下も同様です:

  • gt: より大きい(greater than)
  • le: 小なりイコール(less than or equal)
{!../../../docs_src/path_params_numeric_validations/tutorial005.py!}

数値の検証: 浮動小数点、 大なり小なり

数値のバリデーションはfloatの値に対しても有効です。

ここで重要になってくるのはgtだけでなくgeも宣言できることです。これと同様に、例えば、値が1より小さくても0より大きくなければならないことを要求することができます。

したがって、0.5は有効な値ですが、0.00はそうではありません。

これはltも同じです。

{!../../../docs_src/path_params_numeric_validations/tutorial006.py!}

まとめ

QueryPath(そしてまだ見たことない他のもの)では、クエリパラメータと文字列の検証{.internal-link target=_blank}と同じようにメタデータと文字列の検証を宣言することができます。

また、数値のバリデーションを宣言することもできます:

  • gt: より大きい(greater than)
  • ge: 以上(greater than or equal)
  • lt: より小さい(less than)
  • le: 以下(less than or equal)

!!! info "情報" QueryPathなどは後に共通のParamクラスのサブクラスを見ることになります。(使う必要はありません)

そして、それらすべては、これまで見てきた追加のバリデーションとメタデータと同じパラメータを共有しています。

!!! note "技術詳細" fastapiからQueryPathなどをインポートすると、これらは実際には関数です。

呼び出されると、同じ名前のクラスのインスタンスを返します。

そのため、関数である`Query`をインポートし、それを呼び出すと、`Query`という名前のクラスのインスタンスが返されます。

これらの関数は(クラスを直接使うのではなく)エディタが型についてエラーとしないようにするために存在します。

この方法によって、これらのエラーを無視するための設定を追加することなく、通常のエディタやコーディングツールを使用することができます。