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では関係ありません。パラメータは名前、型、デフォルトの宣言(Query
、Path
など)で検出され、順番は気にしません。
そのため、以下のように関数を宣言することができます:
{!../../../docs_src/path_params_numeric_validations/tutorial002.py!}
必要に応じてパラメータを並び替えるトリック
クエリパラメータq
をQuery
やデフォルト値なしで宣言し、パスパラメータitem_id
をPath
を用いて宣言し、それらを別の順番に並びたい場合、Pythonには少し特殊な構文が用意されています。
関数の最初のパラメータとして*
を渡します。
Pythonはその*
で何かをすることはありませんが、それ以降のすべてのパラメータがキーワード引数(キーと値のペア)として呼ばれるべきものであると知っているでしょう。それはkwargs
としても知られています。たとえデフォルト値がなくても。
{!../../../docs_src/path_params_numeric_validations/tutorial003.py!}
数値の検証: 以上
Query
とPath
(、そして後述する他のもの)を用いて、文字列の制約を宣言することができますが、数値の制約も同様に宣言できます。
ここで、ge=1
の場合、item_id
は1
「より大きいg
か、同じe
」整数でなれけばなりません。
{!../../../docs_src/path_params_numeric_validations/tutorial004.py!}
数値の検証: より大きいと小なりイコール
以下も同様です:
gt
: より大きい(g
reatert
han)le
: 小なりイコール(l
ess than ore
qual)
{!../../../docs_src/path_params_numeric_validations/tutorial005.py!}
数値の検証: 浮動小数点、 大なり小なり
数値のバリデーションはfloat
の値に対しても有効です。
ここで重要になってくるのはgt
だけでなくge
も宣言できることです。これと同様に、例えば、値が1
より小さくても0
より大きくなければならないことを要求することができます。
したがって、0.5
は有効な値ですが、0.0
や0
はそうではありません。
これはlt
も同じです。
{!../../../docs_src/path_params_numeric_validations/tutorial006.py!}
まとめ
Query
とPath
(そしてまだ見たことない他のもの)では、クエリパラメータと文字列の検証{.internal-link target=_blank}と同じようにメタデータと文字列の検証を宣言することができます。
また、数値のバリデーションを宣言することもできます:
gt
: より大きい(g
reatert
han)ge
: 以上(g
reater than ore
qual)lt
: より小さい(l
esst
han)le
: 以下(l
ess than ore
qual)
!!! info "情報"
Query
、Path
などは後に共通のParam
クラスのサブクラスを見ることになります。(使う必要はありません)
そして、それらすべては、これまで見てきた追加のバリデーションとメタデータと同じパラメータを共有しています。
!!! note "技術詳細"
fastapi
からQuery
、Path
などをインポートすると、これらは実際には関数です。
呼び出されると、同じ名前のクラスのインスタンスを返します。
そのため、関数である`Query`をインポートし、それを呼び出すと、`Query`という名前のクラスのインスタンスが返されます。
これらの関数は(クラスを直接使うのではなく)エディタが型についてエラーとしないようにするために存在します。
この方法によって、これらのエラーを無視するための設定を追加することなく、通常のエディタやコーディングツールを使用することができます。