ファイルのアップロードはWebアプリで最も頻繁に利用される機能として、ファイルをサーバーにアップロードすることを意味しています。そして、FastAPIは、Python言語のWeb開発フレームワークとして、ファイルのアップロードに対応できます。そこで、本文では、FastAPIでファイルをアップローする方法を皆さんに紹介します。本ガイドを参照して、FastAPIのファイルアップロード方法、ユースケース、IDEエディターで実装する手順などを手に入れることができます。
Apidogは、API設計、ドキュメンテーション、テストやモックなどにも対応できる包括的なAPI管理ツールとして、HTTP、gRPC、Websocketなど様々なプロトコルにも互換できます。下記のボタンからApidogを完全無料で利用し始めましょう👇👇👇
FastAPIとは
FastAPIは、高性能なAPI開発を実現するためのPythonフレームワークで、StarletteとPydanticライブラリーに基づいています。REST API開発における新しいスタンダードとして、Pythonコミュニティで急速に注目を集めているフレームワークです。 機械学習プロジェクト等での利用に適している点が大きな特徴です。
公式サイト:https://fastapi.tiangolo.com/ja/
FastAPIの特徴といえば、主に次のようなものがあります:
- シンプルでintuitiveな設計:ルーティング、リクエスト、レスポンスなどの機能がよく構造化されている
- 超高速:他のPythonフレームワークよりもはるかに高速に動作する
- 自動生成されるインタラクティブドキュメント:OpenAPI標準に準拠したドキュメントが自動生成される
- データ検証:Pydanticを利用したデータ検証機能
- シンプルなデプロイ: ASGIサーバーとの親和性が高い
- 機械学習対応:TensorFlowやPyTorchとのインテグレーションが容易
FastAPIでファイルをアップロードする
それでは、この部分では、FastAPIでファイルをアップロードする方法を皆さんに紹介します。
まず、FastAPIがパソコンにきちんとインストールされていることを確保する必要があります。まだインストールしていない場合は、次のコマンドで、pipを利用してFastAPIをインストールすることができます:
pip install fastapi
pip install python-multipart
そして、簡単なFastAPIアプリを作成して、ファイルアップロードへのサポートを追加します。ここで、IDEエディターで fastapi-file.py
というファイルを作成して、次のコードを当該ファイルに貼り付けましょう。
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
contents = await file.read()
return {"filename": file.filename, "contents": contents}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
上記のコードでは、ファイルを受けるために、 /uploadfile/
というルーディングを作成しました。そして、 create_upload_file()
という関数では、 UploadFile
クラスをパラメータとして、アップロードファイルを受信するように設定しています。最後に、 read()
メソッドを利用して、ファイルの内容を読み込んたり、処理したりしています。
このケースでは、ファイル名と内容をJSONフォーマットのレスポンスで返すと設定されています。
アプリを実行
FastAPIのアプリを実行してファイルアップロードの機能をテストするには、uvicorn
のようなASGIサーバーを利用する必要があります。そこで、 uvicorn
がインストールされることを確認してください。
まだインストールされていない場合は、次のコマンドでpipを利用してインストールすることができます:
pip install uvicorn
そして、IDEエディターでターミナルを開き、 fastapi-file.py
が保存されているディレクトリにナビゲートします。最後に、次のコマンドでFastAPIのアプリを起動することができます:
uvicorn fastapi-file:app --reload
ここで、FastAPIのアプリが成功に起動され、cURL、ApidogのようなHTTPリクエストツールを利用して、 http://localhost:8000/uploadfile/
にファイルをアップロードしてPOSTリクエストを送信できるようになります。そして、ファイル名とファイルの内容をレスポンスで確認できるはずです。
ApidogでAPIを簡単にテスト
FastAPIでWebアプリかAPIを作成した後、Apidogという使いやすいAPI管理ツールを使ってFastAPIのインターフェースを便利にテストすることができます。Apidogは、API設計、ドキュメンテーション、テストやモックなどにも対応できる包括的なAPI管理ツールとして、HTTP、gRPC、Websocketなど様々なプロトコルにも互換できます。
例えば、FastAPIのファイルアップロード機能をテストするために、Apidogで新しいリクエストを作成して、HTTPメソッドをPOSTに指定し、APIのエンドポイントURLを記入した上、Bodyでfrom-data
でデータのタイプをfile
に変更することで、簡単にファイルをアップロードすることができます。
また、もしこのエンドポイントの使用がApidogに保存されている場合、Apidogは、レスポンスがAPI仕様書に掲載されているレスポンスの定義に一致されているかどうかを自動検証してくれますので、非常に便利です。
まとめ
以上、本ガイドではFastAPIを利用して、WebアプリやAPIにファイルアップロード機能を実装する方法をご紹介しました。
具体的には、FastAPIでルーティングとエンドポイントを設定し、UploadFileクラスを使ってアップロードされたファイルを処理する方法を解説しました。また、uvicornでアプリを起動して機能をテストしたり、Apidogで便利にAPIインターフェースをテストできることもわかりました。