⚡️ Python FastAPI入門:高速でモダンなAPI開発の第一歩
📦 はじめに
FastAPIは、Pythonで高速にWeb APIを構築するための軽量かつモダンなWebフレームワークです。自動ドキュメント生成、高速な処理、非同期対応といった特徴により、FlaskやDjango REST frameworkの代替として人気を集めています。また、Pythonの型ヒントを活用することで、開発者は直感的かつ堅牢なAPI設計を行うことができます。
本記事では、FastAPIの基本的な使い方から、簡単なAPIサーバーの作成方法、そしてリクエストの受け取り方やデータバリデーションの方法までをステップバイステップで解説します。Pythonの基本文法を理解している方であれば、すぐに試せる内容です。
さらに、本記事ではSwagger UIやリクエストボディのバリデーションなど、開発時に役立つFastAPI独自の機能についても掘り下げて解説します。この記事を読むことで、FastAPIを使ってすぐに実践的なAPIを開発する第一歩を踏み出せるようになります。
🔧 FastAPIのインストール
まずはFastAPIとASGIサーバーであるuvicornをインストールします。uvicornはASGI互換のアプリケーションサーバーであり、FastAPIの非同期機能を最大限に活用するために必要です。
pip install fastapi uvicorn
インストール後は、必要に応じて型チェックや補完を強化するエディタ(例:VSCode)を活用することで、開発効率を向上させることができます。また、Pythonの仮想環境を使うことで依存関係を分離し、プロジェクトごとの環境管理もスムーズになります。
🖥 最小のAPIを作ってみる
main.py
という名前で以下のコードを書きます。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
次のコマンドでアプリケーションを起動します。
uvicorn main:app --reload
このとき、--reload
オプションを使うことでコードの変更を自動で検出し、サーバーが再起動されます。開発中には非常に便利な機能です。
起動後、ブラウザで http://127.0.0.1:8000
にアクセスすると、JSONレスポンスが表示されます。
🖥️ ブラウザに表示されるJSON
また、http://127.0.0.1:8000/docs
にアクセスすると、自動生成されたSwagger UIが確認できます。これにより、エンドポイントのテストやドキュメント確認がブラウザ上で簡単に行えます。
🧭 Swagger UIの例
ブラウザに以下のようなインターフェースが表示され、利用可能なエンドポイントを確認し、その場でリクエストのテストも可能です。
※実際のUIはインタラクティブで、ボタンで操作が可能です。API仕様の確認や、他の開発者との共有にも非常に役立ちます。
📥 パスパラメータとクエリパラメータ
FastAPIは、URLの一部(パスパラメータ)やURL末尾に付与されたクエリ文字列(クエリパラメータ)を簡単に取得できます。型ヒントを用いることで、パラメータの型が自動的にチェックされ、入力ミスの防止につながります。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
例えば http://127.0.0.1:8000/items/5?q=hello
にアクセスすると、次のようなレスポンスが返ります:
このように、パスやクエリに含まれる情報を明示的に取り出して処理することが可能で、RESTfulな設計に非常に適しています。
また、複数のパラメータを同時に扱う場合もシンプルな記述で対応でき、API仕様の見通しが良くなります。
📝 POSTメソッドとPydantic
FastAPIでは、リクエストボディの構造をpydanticというライブラリを使って定義します。これにより、リクエストのバリデーションが自動的に行われるため、安全かつ信頼性の高いAPI設計が可能になります。
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
@app.post("/items/")
def create_item(item: Item):
return {"name": item.name, "price": item.price}
🔍 Swagger UIを使ってJSONを送る
FastAPIは、自動で生成されるSwagger UI(http://127.0.0.1:8000/docs)
を通じて、簡単にJSONリクエストを送信・テストすることができます。
- ブラウザで
http://127.0.0.1:8000/docs
にアクセスします。 -
POST /items/
をクリックして展開します。 - 「Try it out」ボタンをクリックします。
- 以下のようなJSONを入力します:
{
"name": "Apple",
"price": 120.5
}
- 「Execute」を押すと、リクエストが送信され、レスポンスが下に表示されます。
次のようなレスポンスが返ります:
{"name": "Apple", "price": 120.5}
このとき、もしname
が空だったりprice
が数値でなかった場合は、自動的にバリデーションエラーが発生し、エラーメッセージが返されます。
Pydanticのバリデーション機能は非常に強力で、文字列の最小・最大長、正規表現、ネストした構造、デフォルト値、条件付き制約などもサポートしており、複雑な入力仕様にも対応できます。
さらに、FastAPIはこれらのバリデーションルールをもとに、Swagger UIに自動で反映するため、クライアント側の開発者にとっても利便性が高まります。
📚 まとめ
- FastAPIは高速かつモダンなPythonのWebフレームワークであり、非同期処理と型ヒントを活かした開発が可能。
- uvicornと組み合わせることで、開発サーバーとして軽量かつ高速な環境が構築できる。
- Swagger UIやRedocによって、ドキュメントの自動生成が可能。
- Pydanticにより、リクエストデータの型チェックとバリデーションが容易に行える。
- パスパラメータやクエリパラメータの取得もシンプルで柔軟。
FastAPIは初心者でも始めやすく、実践的なアプリケーション開発にも対応できる柔軟性を持っています。また、ドキュメントが充実しており、公式チュートリアルやサンプルコードを参照しながら学習を進めることができます。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion