FastAPIとは
FastAPIは、Pythonのモダンで高速(高性能)、Webフレームワークで、APIの構築に最適です。以下にその主な特徴を挙げます:
- 高速: Starlette(非同期処理)とPydantic(データバリデーション)に基づいています。これにより、NodeJSやGoといった他のフレームワークと比較しても非常に高速です。
- 高生産性: オプションの自動リクエストとレスポンスの型チェックを提供します。これにより、バグを早期に発見し、開発プロセスをスムーズに進めることができます。
- 簡単に使用できる: FastAPIは直感的で使いやすい設計を目指しています。これにより、開発者はAPIの開発に集中することができます。
- モダン: FastAPIは、Pythonの最新の機能(Python 3.6以上)を活用しています。これにより、非同期処理や型ヒントなどの機能を使用することができます。
- 以上のような特徴により、FastAPIはPythonでAPIを開発する際の優れた選択肢となっています。
-
https://fastapi.tiangolo.com/
-
https://www.techempower.com/benchmarks/
-
https://fastapi.tiangolo.com/features/
-
https://fastapi.tiangolo.com/tutorial/
-
https://fastapi.tiangolo.com/python-types/
Unionの基本的な使い方
Pythonの型ヒントシステムには、Union
という便利な機能があります。Union
は、複数の型のいずれかを表すことができます。以下にその基本的な使い方を示します:
from typing import Union
def process_data(data: Union[int, str]):
if isinstance(data, int):
return data * 10
elif isinstance(data, str):
return data.upper()
上記の例では、process_data
関数はint
型またはstr
型のdata
を受け取ることができます。isinstance
関数を使用して、data
の型をチェックし、それに応じて処理を行います。
- このように、
Union
を使用すると、関数が複数の型の引数を受け取ることができ、それぞれに対して異なる処理を行うことが可能になります。これにより、コードの柔軟性と再利用性が向上します。 -
https://docs.python.org/3/library/typing.html#typing.Union
-
https://www.python.org/dev/peps/pep-0484/
-
https://docs.python.org/3/library/functions.html#isinstance
FastAPIでのUnionの利用例
FastAPIでは、Union
を使用して、エンドポイントが複数の型のリクエストを受け取ることができます。以下にその利用例を示します:
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cat(BaseModel):
name: str
breed: str
class Dog(BaseModel):
name: str
breed: str
@app.post("/pets")
async def create_pet(pet: Union[Cat, Dog]):
if isinstance(pet, Cat):
return {"message": f"Hello {pet.name}, you are a cool cat!"}
elif isinstance(pet, Dog):
return {"message": f"Hello {pet.name}, you are a good dog!"}
上記の例では、/pets
エンドポイントはCat
型またはDog
型のpet
を受け取ることができます。isinstance
関数を使用して、pet
の型をチェックし、それに応じてメッセージを返します。
- このように、FastAPIと
Union
を組み合わせることで、APIが複数の型のリクエストを柔軟に処理することが可能になります。 -
https://fastapi.tiangolo.com/tutorial/body-nested-models/
-
https://fastapi.tiangolo.com/tutorial/body-multiple-params/
-
https://fastapi.tiangolo.com/tutorial/path-params/
-
https://fastapi.tiangolo.com/tutorial/query-params-str-validations/
FastAPIとUnionを用いたAPI設計
FastAPIとUnion
を組み合わせることで、API設計の柔軟性と拡張性が大幅に向上します。以下にその具体的な利用例を示します:
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cat(BaseModel):
name: str
breed: str
class Dog(BaseModel):
name: str
breed: str
class Bird(BaseModel):
name: str
species: str
@app.post("/pets")
async def create_pet(pet: Union[Cat, Dog, Bird]):
if isinstance(pet, Cat):
return {"message": f"Hello {pet.name}, you are a cool cat!"}
elif isinstance(pet, Dog):
return {"message": f"Hello {pet.name}, you are a good dog!"}
elif isinstance(pet, Bird):
return {"message": f"Hello {pet.name}, you are a beautiful bird!"}
上記の例では、/pets
エンドポイントはCat
型、Dog
型、またはBird
型のpet
を受け取ることができます。isinstance
関数を使用して、pet
の型をチェックし、それに応じてメッセージを返します。
- このように、FastAPIと
Union
を組み合わせることで、APIが複数の型のリクエストを柔軟に処理することが可能になります。これにより、API設計の柔軟性と拡張性が大幅に向上します。 -
https://fastapi.tiangolo.com/tutorial/body-nested-models/
-
https://fastapi.tiangolo.com/tutorial/body-multiple-params/
-
https://fastapi.tiangolo.com/tutorial/path-params/
-
https://fastapi.tiangolo.com/tutorial/query-params-str-validations/