Files
fastapi/docs/ja/docs/tutorial/path-params-numeric-validations.md
Sebastián Ramírez b0e99d66e8 🌐 Update translations for ja (update-outdated) (#14588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Maruo.S <raspi-maru2004@outlook.jp>
2026-02-04 17:44:21 +01:00

7.6 KiB

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

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

Pathのインポート

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

{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}

/// info | 情報

FastAPI はバージョン 0.95.0 でAnnotatedのサポートを追加し(そして推奨し始めました)。

古いバージョンの場合、Annotatedを使おうとするとエラーになります。

Annotatedを使用する前に、FastAPI のバージョンを少なくとも 0.95.1 までアップグレードしてください{.internal-link target=_blank}。

///

メタデータの宣言

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

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

{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[10] *}

/// note | 備考

パスパラメータはパスの一部でなければならないので、常に必須です。Noneで宣言したりデフォルト値を設定したりしても何も影響せず、常に必須のままです。

///

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

/// tip | 豆知識

Annotatedを使う場合、これはおそらくそれほど重要でも必要でもありません。

///

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

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

しかし、パスパラメータitem_idのためにPathを使用する必要があります。そして何らかの理由でAnnotatedを使いたくないとします。

Pythonは「デフォルト」を持つ値を「デフォルト」を持たない値の前に置くとエラーになります。

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

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

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

{* ../../docs_src/path_params_numeric_validations/tutorial002_py39.py hl[7] *}

ただし、Annotatedを使う場合はこの問題は起きないことを覚えておいてください。Query()Path()に関数パラメータのデフォルト値を使わないためです。

{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *}

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

/// tip | 豆知識

Annotatedを使う場合、これはおそらくそれほど重要でも必要でもありません。

///

これは小さなトリックで、便利な場合がありますが、頻繁に必要になることはありません。

次のことをしたい場合:

  • qクエリパラメータをQueryもデフォルト値もなしで宣言する
  • パスパラメータitem_idPathを使って宣言する
  • それらを別の順番にする
  • Annotatedを使わない

...Pythonにはそのための少し特殊な構文があります。

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

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

{* ../../docs_src/path_params_numeric_validations/tutorial003_py39.py hl[7] *}

Annotatedのほうがよい

Annotatedを使う場合は、関数パラメータのデフォルト値を使わないため、この問題は起きず、おそらく*を使う必要もありません。

{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py39.py hl[10] *}

数値の検証: 以上

QueryPath(、そして後述する他のもの)を用いて、数値の制約を宣言できます。

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

{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *}

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

以下も同様です:

  • gt: greater than
  • le: less than or equal

{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *}

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

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

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

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

これはltも同じです。

{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py39.py hl[13] *}

まとめ

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という名前のクラスのインスタンスが返されます。

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

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

///