# 追加データ型 { #extra-data-types }

今まで、以下のような一般的なデータ型を使用してきました:

* `int`
* `float`
* `str`
* `bool`

しかし、より複雑なデータ型を使用することもできます。

そして、今まで見てきたのと同じ機能を持つことになります:

* 素晴らしいエディタのサポート。
* 受信したリクエストからのデータ変換。
* レスポンスデータのデータ変換。
* データの検証。
* 自動注釈と文書化。

## 他のデータ型 { #other-data-types }

ここでは、使用できる追加のデータ型のいくつかを紹介します:

* `UUID`:
    * 多くのデータベースやシステムで共通のIDとして使用される、標準的な「ユニバーサルにユニークな識別子」です。
    * リクエストとレスポンスでは`str`として表現されます。
* `datetime.datetime`:
    * Pythonの`datetime.datetime`です。
    * リクエストとレスポンスはISO 8601形式の`str`で表現されます（例: `2008-09-15T15:53:00+05:00`）。
* `datetime.date`:
    * Python `datetime.date`。
    * リクエストとレスポンスはISO 8601形式の`str`で表現されます（例: `2008-09-15`）。
* `datetime.time`:
    * Pythonの`datetime.time`。
    * リクエストとレスポンスはISO 8601形式の`str`で表現されます（例: `14:23:55.003`）。
* `datetime.timedelta`:
    * Pythonの`datetime.timedelta`です。
    * リクエストとレスポンスでは合計秒数の`float`で表現されます。
    * Pydanticでは「ISO 8601 time diff encoding」として表現することも可能です。[詳細はドキュメントを参照してください](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)。
* `frozenset`:
    * リクエストとレスポンスでは`set`と同じように扱われます:
        * リクエストでは、リストが読み込まれ、重複を排除して`set`に変換されます。
        * レスポンスでは`set`が`list`に変換されます。
        * 生成されたスキーマは`set`の値が一意であることを指定します（JSON Schemaの`uniqueItems`を使用します）。
* `bytes`:
    * Pythonの標準的な`bytes`です。
    * リクエストとレスポンスでは`str`として扱われます。
    * 生成されたスキーマは`str`で`binary`の「フォーマット」を持つことを指定します。
* `Decimal`:
    * Pythonの標準的な`Decimal`です。
    * リクエストとレスポンスでは`float`と同じように扱われます。
* 有効なPydanticのデータ型はここで確認できます: [Pydantic のデータ型](https://docs.pydantic.dev/latest/usage/types/types/)。

## 例 { #example }

ここでは、上記の型のいくつかを使用したパラメータを持つ*path operation*の例を示します。

{* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[1,3,12:16] *}

関数内のパラメータは自然なデータ型を持っていることに注意してください。そして、例えば、以下のように通常の日付操作を行うことができます:

{* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[18:19] *}
