FastAPIとUvicornを使って簡単なAPIサーバを構築する


この記事はプロモーションを含みます。

AlmaLinux

FastAPIとUvicornを使用して、APIサーバを構築する方法と簡単な使い方を解説します。

はじめに・環境

APIの実行環境が必要になり、FastAPIとUvicornを使って構築したので、備忘録としてここに残しておきたいと思います。
以下は構築時の環境情報です。

OSAlmaLinux 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を呼び出せるようにします。

ライブサーバーを起動すると、ターミナル(TeraTermなど)が占有されてしまうので、別ターミナルで起動した方が良さそうです。

まずは、前項で作成したスクリプトの配置先に移動します。

[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や画面からの接続方法なども書いていこうと思います。

コメント

タイトルとURLをコピーしました