FastAPIとは
FastAPIは、Pythonの非常に高速な(高性能)、使いやすい、モダンな、高速(高性能)なWebフレームワークです。これは、Python 3.6以降の型ヒントを使用してAPIを構築するためのものです。
FastAPIは、以下のような特徴を持っています:
- 高速: NodeJSやGoと同等のパフォーマンスを持つPythonフレームワークです(StarletteとPydanticのおかげです)。
- 高速なコーディング: 約2〜3倍の開発速度。開発者の時間を節約し、コードのバグを減らします。
- 少ないバグ: 開発者のエラーを減らします。エディタがヘルプを提供し、コードが間違っている場所を指摘します。
- 直感的: 優れたエディタのサポート。自動補完が可能です。少ない時間で、より少ないバグを生み出します。
- 簡単: 高度に直感的で使いやすい設計を目指しています。ドキュメンテーションを読む時間を大幅に削減します。
- 短い: コードの重複を最小限に抑えます。各パラメータの複数の機能を最大限に活用します。少ないバグを生み出します。
- 堅牢: プロダクションでの使用を目指して設計されています。自動的にインタラクティブなAPIドキュメンテーションを提供します。
- 基準に基づいています: OpenAPI(以前はSwagger)とJSON Schemaに完全に準拠しています。
- Pythonic: デコレータを使用した非常に簡単で直感的な設計。Pythonの長所を最大限に活用します。
FastAPIは、これらの特徴を持つことで、APIの開発を容易にし、その結果として生産性を向上させることができます。また、FastAPIは、Pythonの強力な型システムを活用して、コードの品質とメンテナンス性を向上させることができます。これは、大規模なシステムや長期間にわたるプロジェクトで特に有用です。
ドキュメンテーションの設定方法
FastAPIは、APIのドキュメンテーションを自動的に生成します。これは、OpenAPIと呼ばれる標準に基づいています。このドキュメンテーションは、APIのエンドポイント、リクエストボディ、パラメータ、レスポンスなど、APIの全ての詳細を表示します。
以下に、FastAPIのドキュメンテーションを設定する基本的な手順を示します。
- FastAPIアプリケーションを作成します。
from fastapi import FastAPI
app = FastAPI()
- エンドポイントを作成します。ここでは、
/items/{item_id}
というエンドポイントを作成します。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
- これで、FastAPIのドキュメンテーションは自動的に生成されます。ブラウザで
http://localhost:8000/docs
にアクセスすると、インタラクティブなドキュメンテーションを見ることができます。
FastAPIのドキュメンテーションは、APIの使用方法を理解しやすくするための強力なツールです。また、APIのテストも行うことができます。これにより、開発者はAPIの動作を確認し、必要に応じて調整することができます。これは、APIの品質を向上させ、開発プロセスを効率化するのに役立ちます。
URLのカスタマイズ
FastAPIでは、URLのカスタマイズが容易に行えます。以下に、基本的な手順を示します。
- FastAPIアプリケーションを作成します。
from fastapi import FastAPI
app = FastAPI()
- エンドポイントを作成します。ここでは、
/items/{item_id}
というエンドポイントを作成します。{item_id}
は、URLの一部として動的に変更できるパラメータです。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
この例では、item_id
はURLの一部として動的に変更できます。つまり、/items/1
や/items/2
など、任意のitem_id
をURLに含めることができます。
- さらに複雑なURLを作成することも可能です。例えば、
/users/{user_id}/items/{item_id}
のようなURLを作成することもできます。
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: int):
return {"user_id": user_id, "item_id": item_id}
このように、FastAPIを使用すると、URLを容易にカスタマイズし、動的なパラメータを含めることができます。これにより、APIのエンドポイントを柔軟に設計し、ユーザーのニーズに合わせて調整することが可能になります。これは、APIの使いやすさと効率性を向上させるのに役立ちます。また、URLのカスタマイズは、APIのセキュリティを強化し、不正アクセスを防ぐのにも役立ちます。これは、特定のURLパスに対するアクセスを制限し、認証を必要とすることで実現できます。これは、APIの安全性を確保するための重要な側面です。
OpenAPIの表示と無効化
FastAPIは、OpenAPI(以前はSwaggerと呼ばれていました)に基づいてAPIのドキュメンテーションを自動的に生成します。これにより、APIのエンドポイント、リクエストボディ、パラメータ、レスポンスなど、APIの全ての詳細を表示することができます。
しかし、特定の理由からOpenAPIのドキュメンテーションを表示したくない場合や、完全に無効化したい場合もあります。そのような場合、FastAPIではOpenAPIの表示と無効化を簡単に行うことができます。
以下に、OpenAPIの表示と無効化の手順を示します。
- FastAPIアプリケーションを作成します。
from fastapi import FastAPI
app = FastAPI()
- FastAPIのインスタンス作成時に、
openapi_url
パラメータを設定します。このパラメータにNone
を設定すると、OpenAPIのドキュメンテーションは無効化されます。
app = FastAPI(openapi_url=None)
これで、FastAPIのOpenAPIドキュメンテーションは無効化され、http://localhost:8000/openapi.json
にアクセスしてもドキュメンテーションは表示されません。
この機能は、APIのセキュリティを強化するために使用できます。例えば、内部的に使用するAPIであったり、特定のユーザーのみに公開したいAPIなど、ドキュメンテーションを公開したくない場合に有用です。また、ドキュメンテーションを無効化することで、不要なリソースの消費を防ぐこともできます。これは、APIのパフォーマンスと効率性を向上させるのに役立ちます。