FastAPIとUvicornを使用して、APIサーバを構築する方法と簡単な使い方を解説します。
はじめに・環境
APIの実行環境が必要になり、FastAPIとUvicornを使って構築したので、備忘録としてここに残しておきたいと思います。
以下は構築時の環境情報です。
OS | AlmaLinux release 9.0 (Emerald Puma) | インストール手順(バージョン8.4) |
ホストマシン | Windows11 Pro 22H2 | |
アプリ | VirtualBox 7.0 | インストール手順 |
構築時にpipコマンドを使用するので、入っていない方は以下を参考にインストールして下さい。
インストール(FastAPI・Uvicorn)
ここでは、FastAPIとUvicornをインストールする方法を説明します。
以下のように、pipコマンドでインストールを行います。
[root@localhost ~]# pip install fastapi uvicorn Collecting fastapi Downloading fastapi-0.108.0-py3-none-any.whl (92 kB) |????????????????????????????????| 92 kB 2.5 MB/s Collecting uvicorn Downloading uvicorn-0.25.0-py3-none-any.whl (60 kB) |????????????????????????????????| 60 kB 8.4 MB/s Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 Downloading pydantic-2.5.3-py3-none-any.whl (381 kB) |????????????????????????????????| 381 kB 18.0 MB/s Collecting starlette<0.33.0,>=0.29.0 Downloading starlette-0.32.0.post1-py3-none-any.whl (70 kB) |????????????????????????????????| 70 kB 9.7 MB/s Collecting typing-extensions>=4.8.0 Downloading typing_extensions-4.9.0-py3-none-any.whl (32 kB) Collecting click>=7.0 Downloading click-8.1.7-py3-none-any.whl (97 kB) |????????????????????????????????| 97 kB 15.8 MB/s Collecting h11>=0.8 Downloading h11-0.14.0-py3-none-any.whl (58 kB) |????????????????????????????????| 58 kB 9.0 MB/s Collecting pydantic-core==2.14.6 Downloading pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB) |????????????????????????????????| 2.1 MB 22.7 MB/s Collecting annotated-types>=0.4.0 Downloading annotated_types-0.6.0-py3-none-any.whl (12 kB) Collecting anyio<5,>=3.4.0 Downloading anyio-4.2.0-py3-none-any.whl (85 kB) |????????????????????????????????| 85 kB 7.3 MB/s Collecting exceptiongroup>=1.0.2 Downloading exceptiongroup-1.2.0-py3-none-any.whl (16 kB) Collecting idna>=2.8 Downloading idna-3.6-py3-none-any.whl (61 kB) |????????????????????????????????| 61 kB 325 kB/s Collecting sniffio>=1.1 Downloading sniffio-1.3.0-py3-none-any.whl (10 kB) Installing collected packages: typing-extensions, sniffio, idna, exceptiongroup, pydantic-core, anyio, annotated-types, starlette, pydantic, h11, click, uvicorn, fastapi Successfully installed annotated-types-0.6.0 anyio-4.2.0 click-8.1.7 exceptiongroup-1.2.0 fastapi-0.108.0 h11-0.14.0 idna-3.6 pydantic-2.5.3 pydantic-core-2.14.6 sniffio-1.3.0 starlette-0.32.0.post1 typing-extensions-4.9.0 uvicorn-0.25.0 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
pipコマンドの結果にエラーなどが無いことを確認します。
次に、uvicornコマンドが認識するかを確認します。
[root@localhost ~]# uvicorn --version Running uvicorn 0.25.0 with CPython 3.9.10 on Linux
バージョン情報が表示されれば、FastAPIとUvicornのインストールは完了となります。
使い方
ここでは、前項でインストールしたFastAPIとUvicornの使い方を説明します。
APIの動作を定義する
まずは、どのようにAPIが動くかを定義するためのスクリプトを作成します。
今回は簡単に、GETメソッドを使用して、テキストを表示するだけのスクリプトを作っていきたいと思います。
ここでは、スクリプトのファイル名を「main.py」としています。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def hello():
return {"text": "Hello!"}
作成後は、Linux側に「/home/work/」というディレクトリを作成して、スクリプトを配置します。
ディレクトリは任意なので、ご自身の使いやすいもので構いません。
[root@localhost work]# ls -l /home/work/ 合計 4 -rw-r--r--. 1 root root 109 12月 31 00:13 main.py
ライブサーバーを起動する
ここでは、ライブサーバーを起動して、APIを呼び出せるようにします。
まずは、前項で作成したスクリプトの配置先に移動します。
[root@localhost work]# cd /home/work/ [root@localhost work]# ls -l 合計 4 -rw-r--r--. 1 root root 109 12月 31 00:13 main.py
次に、uvicornコマンドでライブサーバーの起動を行います。
特にエラー(ERROR)などが表示されていなければ正常に起動されています。
[root@localhost work]# uvicorn main:app --reload INFO: Will watch for changes in these directories: ['/home/work'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [2934] using StatReload INFO: Started server process [2936] INFO: Waiting for application startup. INFO: Application startup complete.
動作確認
ここでは動作確認として、ローカルからライブサーバーに接続してみます。
今回は、GUIはインストールしていないため、curlコマンドで接続します。
接続先は、ローカルの8000番ポートなので、URLの場合は下記のようになります。
URL:http://127.0.0.1:8000/
[root@localhost work]# curl http://127.0.0.1:8000/ {"text":"Hello!"}[root@localhost work]#
curlコマンドの結果として、スクリプトに記述した下記のメッセージが出力されれば、正常に処理されています。
{"text":"Hello!"}
正常に動作している場合は、ライブサーバーを起動したターミナルに、以下のようなGETが成功したという情報が出力されます。
INFO: 127.0.0.1:12458 - "GET / HTTP/1.1" 200 OK
ライブサーバーを停止する
ライブサーバーを停止するには、ライブサーバーを起動しているターミナルで「Ctrl + C」を実行します。
^CINFO: Shutting down INFO: Waiting for application shutdown. INFO: Application shutdown complete. INFO: Finished server process [2936] INFO: Stopping reloader process [2934] [root@localhost work]#
「Ctrl + C」の実行時にエラー(ERROR)などが出力されずに、ターミナルが戻れば正常に停止されているようです。
記事は以上です。今後は、POSTや画面からの接続方法なども書いていこうと思います。
コメント