見出し画像

FastAPI 超初心者向け入門 / チュートリアル1

以前はDjangoに大変お世話になり、その後浮気してGolangのRevelとか使ってましたが、PythonはAI関連もろもろの広がりがあって便利なことや、FastAP超速いという記事を見て使い始めました。

GOのフレームワークには敵わないみたいですが…Djangoの10倍近い速度
いろいろ素晴らしくてびっくり

自動生成されるドキュメント&APIコールのテストが出来るツールとか洗練されているので是非広まって欲しいです。

目標

チュートリアル終了時のゴールは以下です。

1. API触ったことがある人になる
2. HTTPの実物体験のある人になる
3. Python の仮想環境つくった事ある人になる
4. FastAPIで要約(サマライズ)のAPIサーバーを完成

ざっくり記事内容

  1. Pythonの環境

  2. インストール

  3. チュートリアル プロジェクト

準備編が長くなりPython環境まで書けなかったので今回一緒に解説しますmm

(前の記事:FastAPI準備編)


1.Python環境

仮想環境に FastAPIや関連モジュールをインストールしてローカルで実行する前提です。 Linux Mint (Ubuntuとだいたい同じ)で確認していますが、Mac/Windowsでもだいたい同じだと思います。 

流れとしては、ローカルフォルダのpythonバージョンを pyenv で3.11にしてから venvを入れて環境作成、そこの上でpipでモジュールをインストールします。

1.pyenv

1-1 pyenv のインストール

ホームディレクトリでgit からcloneします

$ cd          #home  へ移動
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

.bashrc (macだと .bash_profile ) にパスを通してcliで使えるように

# Pyenv environment variables                                                                                                                                            
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# Pyenv initialization
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi

1-2 pyenv でpython3.11.0をインストール、現在の作業パスで使うように指定

$ pyenv install 3.11.0
$ pyenv local 3.11.0

pip update

$ pip install --upgrade pip

2. venv

$ python3 -m venv .venv
$ ls
drwxrwxr-x 2 wash wash 4096 121 12:30 bin
drwxrwxr-x 2 wash wash 4096 121 12:30 include
drwxrwxr-x 3 wash wash 4096 121 12:30 lib
lrwxrwxrwx 1 wash wash    3 121 12:30 lib64 -> lib
-rw-rw-r-- 1 wash wash   70 121 12:30 pyvenv.cfg
drwxrwxr-x 3 wash wash 4096 121 12:30 share
 

アクティベート(有効化)

$ source .venv/bin/activate

作業フォルダに移動したら自動で上記のコマンドが実行されるように .bashrcに以下を追加すると便利。

_virtualenv_auto_activate() {
  if [ -e ".venv" ]; then
    # Check to see if already activated to avoid redundant activating
    if [ "$VIRTUAL_ENV" != "$(pwd -P)/.venv" ]; then
        _VENV_NAME=$(basename `pwd`)
        echo Activating virtualenv "$_VENV_NAME"...
        VIRTUAL_ENV_DISABLE_PROMPT=1
        source .venv/bin/activate
        _OLD_VIRTUAL_PS1="$PS1"
        PS1="($_VENV_NAME)$PS1"
        export PS1
    fi
  fi
}

export PROMPT_COMMAND=_virtualenv_auto_activate

# Pyenv environment variables
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# Pyenv initialization
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi

3. pip


venv 設定とactivateができたフォルダで pip でモジュールをインストールすると、そのフォルダの下の .venv にファイルがDLされて、他のプロジェクトに影響しません。

作成済みのrequired.txt からpipで必要モジュールをインストール

$ pip -r required.txt

pipでモジュール追加したときには

$ pip freeze >  required.txt

で、保存しておく。

2.FastAPI のインストール

https://fastapi.tiangolo.com/tutorial/

pip install "fastapi[all]"

これだけ。
fastAPI以外に関連するモジュールも一緒にインストールされます。
インストールされたものは pip freeze で確認できます。

$ pip freeze > requirements.txt

pipでインストール・アンインストールするたびに requirements.txtに保存しておくと、別のマシンでこのファイルにあるものをインストールできて便利です。

$ pip install -r requirements.txt

(宿題)
これを自動化する pipenv や poety  というツールがありますが、今回問題が出たので使いませんでした。

3.最初のプロジェクト

まずは作業ディレクトリを作成, 上記で説明したように環境を作成します。

$ mkdir tuto_FastAPI
$ cd tuto_FastAPI
$ pyenv install 3.11.0
$ pyenv local 3.11.0
$ python3 -m venv .venv
$ source .venv/bin/activate

.gitignore を作成

github で pythonを指定してリポジトリを作れば自動で作られるやつです。
git のプロジェクトを先に作って、その作業ディレクトリで上記をする場合は必要ありませんが、そうでないときには作っておくのが吉。
下記のURLのファイルを先程作ったディレクトリに配置します。

https://github.com/github/gitignore/blob/main/Python.gitignore

main.py を作ってプロジェクト完成!

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

え?これだけですか。。。今までの長い前フリは一体。。。
いやいや、これ最小限サンプルですので

実行

(実行画面①)

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

無事に動くと、こんなふうになります。 http://127.0.0.1:8000 と表示されているので、ブラウザにコピペして確認しましょう。

(ブラウザの表示) 

{"message": "Hello World"}

おめでとうございます、APIの作成と動作確認ができました!

docsで更に確認

FastAPIは自動でAPIのドキュメント作成をしてくれます。 Swaggerの OpenAPIの /docs というページと、ReDcoを使用した /redoc の2種類のページを作成してくれます。

http://127.0.0.1:8000/docs
http://127.0.0.1:8000/redoc

ブラウザで、上記のURLを表示したのが下の画像です。 
(実行画面①ができていれば表示されるはずです)

http://127.0.0.1:8000/docs の表示

右上のボタン [Try It Out ] を押すとAPIを呼び出すこともできます。下の画像は実際に呼び出した結果の表示です。

便利すぎて感謝。。。ありがとうFastAPI作った人たち

こちらは /redoc でアクセスした表示。どちらのページからもopenapi.jsonとしてダウンロードが出来るので便利です。

FastAPI,覚えることが少ないのに高速で便利。。。最高じゃないでしょうか?

次回はFastAPIで一番良く使うリクエストパラメータの扱いと、AI文書要約をするAPIサーバーを作成するチュートリアルを解説します。


この記事が気に入ったらサポートをしてみませんか?