FastAPIは、PythonでWeb APIを構築するための高性能なフレームワークとして、Websocketというプロトコルにも対応できます。本文では、 FastAPIでWebsocketを利用する完全なガイドを詳しく解説します。
WebsocketとFastAPI
Websocketとは
Websocketは、HTTPとは異なるプロトコルで、クライアントとサーバー間で対話的な通信を実現するために設計されています。 Websocketを使うことでリクエストとレスポンス両者間で継続的な接続を確立できるようになります。これにより、サーバーからクライアントへのデータプッシュが可能になります。また、ヘッダ情報が省略されているため通信のオーバーヘッドが少なく、高速なデータ転送が実現できる利点があります。送受信されるデータにはテキストとバイナリの両方を利用でき、用途に合わせて選択できます。
Websocketはウェブブラウザとサーバー間のリアルタイムインタラクションが必要なチャット、多人数同時プレイのゲーム、データのストリーミングなどに活用されています。FastAPIでもWebsocketを簡単に利用でき、双方向通信機能を備えたアプリケーションを開発できるでしょう。
以上のように、Websocketは実時間性とインタラクティブ性をウェブアプリケーションにもたらす、重要な通信技術だと言えます。
FastAPIとWebsocketとの関係性
その一方、FastAPIはWebsocketをサポートしているHTTPベースのAPIフレームワークです。具体的には以下のようなWebsocketの機能を提供します。
- FastAPIのルーターを利用して、Websocketのコネクションを受け付けるパスを定義できる
- connect、receive、disconnectなどのライフサイクルイベントに対応するハンドラを登録できる
- AsyncなコードでWebsocketの送受信を処理できる
- FastAPIのデコレータや依存性注入などの機能と統合して利用できる
- Swagger UIからインタラクティブにWebsocket接続のテストができる
このように、FastAPIはWebsocketをフルサポートしており、他のHTTP APIと同様に柔軟に定義と利用が可能です。特に、Async処理との親和性が高く、リアルタイムデータのストリーミングなどに適しています。
徹底ガイド:FastAPIでWebsocketを利用する
それでは、FastAPIでWebsocketを利用するには、どうしたらいいですか?次はステップバイステップの詳細ガイドを紹介するので、必要な方はご参照ください。
FastAPIとWebsocketのインストール
まずは、FastAPIとWebsocketがパソコンにインストールされていることを確保する必要があります。次のコマンドを使って、FastAPIとWebsocketをインストールすることができます。
pip install fastapi
pip install websockets
FastAPIのアプリにWebsocketサービスを追加
次は、非常に簡単なFastAPIのアプリを作成して、それにWebsocketサービスを追加します。IDEエディターでfastapi-ws.pyというPythonファイルを作成して、そこに次のコードをコピーします。
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message received: {data}")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
上記のコードの中で、/wsのWebsocketルーディングが作成され、Websocket接続に使われます。また、websocket_endpoint()関数の中、WebSocketがパラメータになり、accept()がWebsocketのメソッドとしています。最後に、無限ループを通して、メッセージを送受信したりすることを実現しています。
アプリの実装
FastAPIのアプリを実装してWebsocketをテストしたりするには、uvicornのようなサーバーを使用する必要があります。そこで、パソコンにuvicornがインストールされることを確認してください。まだインストールしていない場合は、次のコマンドでインストールしてください:
pip install uvicorn
そして、IDEエディターで、ターミナルを開き、fastapi-ws.pyの保存先にとなるディレクトリにCDして、次のコマンドでアプリを実装してください:
uvicorn fastapi-ws:app --reload
ここで、WebSocketのクライアントツール(Chromeのデベロッパツールのコンソールか、Websocketに対応可能なクライアント)を使って、ws://localhost:8000/wsに接続することができるようになり、サーバーにメッセージを送信したり、サーバーからメッセージを受信したりすることができます。
ApidogでWebSocketに接続してテストする
それでは、ここでWebsocketに完璧に互換できるクライアントのApidogを皆さんにお勧めします。Apidogを使用すると、非常に直感的で簡単な操作によって、Websocket APIをテストすることができます。次は、先に FastAPIで作成したWebsocket APIをテストする方法を皆さんに紹介します。
ステップ⒈Websocketへの接続を確立する
Apidogを使用して、アドレスバーにエンドポイントとなるURLを入力し、「接続」ボタンをクリックしてサーバーとのハンドシェイクを完了し、WebSocket接続を確立することができます。ここ「ws://localhost:8000/ws」を入力します。
また、認証やその他の複雑なシナリオを満たすために、パラメータ、ヘッダー、クッキーなど、ハンドシェイク中に渡す必要があるパラメータをカスタマイズすることもできます。
ステップ⒉メッセージの送受信をする
接続が確立されたら、「Message」タブの下にメッセージを書くことができます。テキスト、JSON、XML、HTML、その他のテキスト形式のメッセージを直接に書くことに加えて、バイナリ形式のメッセージはBase64または16進数を使用して書くことにも対応できます。メッセージを「送信」すると、レスポンスをすぐ取得することができます。
Apidogは、接続ステータス、送信メッセージ、受信メッセージを新着順に表示する新しいタイムラインビューを提供します。あるメッセージをクリックすると、その詳細情報を簡単に表示できます。
ステップ⒊WebSocket API仕様書を書く
Apidogの優れたドキュメンテーション機能は、WebSocket APIでも利用できます。WebSocket APIの状態、責任者、およびタグを設定し、Markdown形式で詳細な説明を入れることで仕様書を簡単に作成することができます。
もちろん、WebSocket APIの仕様書を作成すると、それを外部チームと共有したり、ブラウザで直接表示したりすることもできます。
ステップ⒋WebSocket APIを保存する
デバッグした後、「保存」ボタンをクリックしてWebSocket APIを現在のプロジェクトに保存することができます。その後、他のチームメンバーが当該APIにアクセスしたり、デバッグしたりすることができるようになります。