FastAPIを使用したファイルアップロードAPIの構築

FastAPIとは何か

FastAPIは、Pythonの非常に高速(高性能)、使いやすい、モダンな、高速(クイック)なWebフレームワークです。これは、Python 3.6以降の型ヒントに基づいています。

FastAPIの主な特徴は次のとおりです:

  • 高速: NodeJSやGoと同等のパフォーマンスを持つPythonフレームワークです。
  • クイックライティング: 開発速度が非常に速く、バグを減らし、開発時間を短縮します。
  • 簡単: 設計が直感的で、使いやすく、ドキュメンテーションが充実しています。
  • 直感的: エディタのサポートが優れており、コードの補完や型チェックが可能です。
  • ロバスト: プロダクションレディで、自動的な対話式APIドキュメンテーションを提供します。
  • 基準に基づく: OpenAPI(以前はSwaggerとして知られていました)とJSONスキーマに準拠しています。
  • セキュリティ対策: OAuth2の認証、フルユーザーセキュリティモデルなど、セキュリティ対策が組み込まれています。

FastAPIは、APIの開発における最新のベストプラクティスと最新のツールを組み合わせて作られており、多くの機能を持つ一方で、直感的で使いやすいAPIを提供します。これにより、開発者はコードの品質とパフォーマンスを維持しながら、生産性を向上させることができます。これは、FastAPIが現代のWebアプリケーションとマイクロサービスの開発において非常に人気のある選択肢となっている理由の一部です。

FastAPIでファイルをアップロードする方法

FastAPIを使用してファイルをアップロードするには、以下の手順を実行します。

まず、FastAPIをインストールします。次に、FastAPIアプリケーションを作成し、アップロードエンドポイントを設定します。このエンドポイントは、UploadFileオブジェクトを使用してファイルを受け取ります。

以下に、基本的なファイルアップロードエンドポイントのコードを示します。

from fastapi import FastAPI, UploadFile, File

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}

このコードでは、/uploadfile/エンドポイントが作成され、POSTリクエストを受け付けます。このリクエストは、UploadFileオブジェクトを必要とします。これは、File(...)を使用してデフォルトの依存関係として設定されます。

このエンドポイントにファイルをアップロードすると、ファイル名がレスポンスとして返されます。

FastAPIのUploadFileは、アップロードされたファイルを非同期で読み取るための.read()メソッドを提供します。また、.filenameでファイル名にアクセスしたり、.fileSpooledTemporaryFileオブジェクトにアクセスしたりすることもできます。

以上が、FastAPIを使用してファイルをアップロードする基本的な方法です。ただし、実際のアプリケーションでは、アップロードされたファイルを保存したり、バリデーションを行ったり、データベースに情報を保存したりするなど、さまざまな追加処理が必要になる場合があります。これらの詳細な手順は、次の小見出しで説明します。

FastAPIでファイルアップロードAPIを作成する手順

FastAPIを使用してファイルアップロードAPIを作成するには、以下の手順を実行します。

  1. FastAPIのインストール: まず、FastAPIをインストールします。これはPythonのパッケージ管理ツールであるpipを使用して行います。コマンドラインから以下のコマンドを実行します。
pip install fastapi
  1. FastAPIアプリケーションの作成: 次に、FastAPIアプリケーションを作成します。これはPythonのスクリプトファイル(例えば、main.py)を作成し、以下のコードを追加します。
from fastapi import FastAPI

app = FastAPI()
  1. アップロードエンドポイントの作成: FastAPIアプリケーションにアップロードエンドポイントを追加します。これは、UploadFileオブジェクトを引数に取る新しいルートを作成します。以下のコードをmain.pyに追加します。
from fastapi import UploadFile, File

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}
  1. サーバーの起動: 最後に、FastAPIアプリケーションを起動します。これは、コマンドラインから以下のコマンドを実行して行います。
uvicorn main:app --reload

以上が、FastAPIを使用してファイルアップロードAPIを作成する基本的な手順です。このAPIは、POSTリクエストを/uploadfile/エンドポイントに送信することで、ファイルをアップロードできます。アップロードされたファイルの名前は、レスポンスとして返されます。

FastAPIでファイルをアップロードするコード例

FastAPIを使用してファイルをアップロードするための基本的なコード例を以下に示します。

from fastapi import FastAPI, UploadFile, File
from typing import List

app = FastAPI()

@app.post("/files/")
async def create_files(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}

このコードでは、/files/エンドポイントが作成され、POSTリクエストを受け付けます。このリクエストは、List[UploadFile]オブジェクトを必要とします。これは、File(...)を使用してデフォルトの依存関係として設定されます。

このエンドポイントに複数のファイルをアップロードすると、アップロードされた各ファイルの名前がレスポンスとして返されます。

このコードは、FastAPIを使用してファイルをアップロードする基本的な方法を示しています。ただし、実際のアプリケーションでは、アップロードされたファイルを保存したり、バリデーションを行ったり、データベースに情報を保存したりするなど、さまざまな追加処理が必要になる場合があります。

FastAPIで作成したファイルアップロードAPIのテスト方法

FastAPIで作成したファイルアップロードAPIをテストするには、以下の手順を実行します。

  1. テストライブラリのインストール: まず、FastAPIのテストに必要なライブラリをインストールします。これはPythonのパッケージ管理ツールであるpipを使用して行います。コマンドラインから以下のコマンドを実行します。
pip install pytest requests
  1. テストスクリプトの作成: 次に、テストスクリプトを作成します。これは新しいPythonのスクリプトファイル(例えば、test_main.py)を作成し、以下のコードを追加します。
import requests

def test_upload_file():
    url = "http://localhost:8000/files/"
    file_path = "path_to_your_file"
    with open(file_path, "rb") as f:
        response = requests.post(url, files={"file": f})
    assert response.status_code == 200
    assert response.json() == {"filenames": ["your_file_name"]}

このコードでは、test_upload_file関数が作成され、requests.postを使用して/files/エンドポイントにPOSTリクエストを送信します。このリクエストは、アップロードするファイルを含むfilesパラメータを必要とします。

  1. テストの実行: 最後に、テストを実行します。これは、コマンドラインから以下のコマンドを実行して行います。
pytest test_main.py

以上が、FastAPIで作成したファイルアップロードAPIをテストする基本的な手順です。このテストは、APIが正しく動作していることを確認します。具体的には、アップロードされたファイルの名前がレスポンスとして正しく返されることを確認します。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です