FastAPI
前回、PyScriptのpy-configタグを使ったライブラリのインポートでインデントが崩れる問題(未解決)に関してお話ししました。
ここまでJavaScript、jQuery(Ajax)、PyScriptと試してきて、簡単な計算アプリくらいならJavaScriptで作れるようになりました。
しかし最終目標としては漢字間違い探しのWebアプリを作りたいということなので、まだまだそれでは足りないですし、jQueryやPyScriptでは(少なくとも現在の私の技量では)うまく動かないということで次の策を考えました。
その次の策というのが「FastAPI」です。
この「FastAPI」とはPythonで動くプログラムなのですが、前に紹介したDjangoのようにWeb上で動かすプログラムです。
そしてDjangoの場合はWebサイトを作るために使用されることが多いのですが、「FastAPI」の場合はあるURLにアクセスしたら、処理を行い、その結果を返す「WebAPI」として用いられることが多いようです。
ここら辺は前に紹介したTwitter APIやOpenWeatherMapを思い浮かべてもらえると分かりやすいと思います。
これらのAPIの場合は特定のURLに対して、「こういった情報をください」という情報付きで送信すると、その答えが返ってくるAPIです。
つまりはこういったWebAPIを自分で作ってみましょう、そのためのライブラリが「FastAPI」というわけです。
とはいうもののWebAPIを作成することは初めてなので、とりあえずのんびりと進めていくことにします。
それでは始めていきましょう。
fastapiとuvicornのインストール
まずはライブラリをインストールしていきます。
必要なライブラリは「fastapi」と「uvicorn」2つです。
pip install fastapi
pip install uvicorn
「fastapi」は実際にFastAPIを使うためのライブラリです。
ただFastAPIの場合はこれまで使ってきたライブラリとは異なり、WebAPIのためのライブラリであるため、インポートすれば動くというわけではありません。
特定のURLにFastAPIのプログラムを置いて、Webサーバーを起動した後、そのURLにアクセスすることで動作します。
ここら辺はWebサイトと同じ仕組みだと思ってもらえれば分かりやすいことでしょう。
ただ現状ではFastAPIのプログラムを置くサーバーを持っていません(Xサーバーでは動かない模様?)。
ということでローカル環境(自分のパソコン内)でWebサーバーを立てて、擬似的にURLを与えて、そのURLにアクセスすることで動作を確認します。
この状態では外からはアクセスできません(つまり他のパソコンからは実行できない)が、無料で使えるFastAPI用のサーバーもありますので、それに関してはまた別の機会に紹介します。
FastAPIで動かすプログラムの作成
次にFastAPIで動かすプログラムを作成していきます。
ちなみにファイル名もFastAPIでは重要で後で使いますのでご注意ください。
今回は「main.py」としておきます。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def test1():
return {"Hello": "World"}
最初は言わずもがなインポートで「from fastapi import FastAPI」とします。
次にFastAPIをインスタンス化(正直インスタンス化はなんなのかよく分かっていませんが、とりあえずFastAPIを使う準備をするということと理解しています)します(app = FastAPI())。
ここまでは毎回、同じように記述すればよくて、重要なのはここからです。
「@app.get(“/”)」がエンドポイント、つまりアクセスするURLを示しています。
とはいってもURL全てが記述されているわけではなく、このFastAPIが実行されているサーバー上のフォルダ位置を相対パスとして示しています。
例えばこのサイト「3PySci」のURLの一番上の場所は「https://3pysci.com」です。
そしてこの下に「fastapi」というフォルダを作り、「main.py」を置き、FastAPIを実行したとします。
この場合、FastAPIで「@app.get(“/”)」と記述した場合のURLは「https://3pysci.com/fastapi/」です。
つまり「https://3pysci.com/fastapi/」にアクセスすると先ほどのプログラムが実行されるというわけです。
このエンドポイントは「main.py」内で複数作成することも可能です。
例えばこんなふうに「@app.get(“/test2”)」も記述してみます。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def test1():
return {"Hello": "World"}
@app.get("/test2")
def test2():
return {"Hello": "test2"}
この場合は先ほどのURL例で説明すると「https://3pysci.com/fastapi/」にアクセスされた場合には「def test1():」の処理が実行されます。
また「https://3pysci.com/fastapi/test2/」にアクセスされた場合には「def test2():」の処理が実行されます。
それでは次にサーバーを起動させ、アクセスしてみましょう。
uvicornでFastAPI実行
uvicornでFastAPIを実行するには、まずターミナル(Windowsならコマンドプロンプト)で先ほど作成したFastAPIのプログラムがあるフォルダまで移動します。
そして「uvicorn main:app –reload」を実行します。
ちなみに「main」はPythonプログラムのファイル名から「.py」を無くしたもので、「app」はFastAPIをインスタンス化した際の変数名です(app = FastAPI())。
最後の「–reload」はプログラムに変更があった場合、uvicornが再起動されるという設定です。
実行して、uvicornでのサーバー起動に成功すると、こんな出力が得られます。
uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['/プログラムのパス']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [21765] using StatReload
INFO: Started server process [21767]
INFO: Waiting for application startup.
INFO: Application startup complete.
重要なのは「http://127.0.0.1:8000」の部分。
このURLにアクセスすると「@app.get(“/”)」で記述した処理が実行されます。
つまり今回の例ですと「{“Hello”: “World”}」が表示されます。
また「http://127.0.0.1:8000/test2」にアクセスすると「{“Hello”: “test2”}」が表示されます。
とりあえず試してみるというレベルではなかなか簡単そうな感触を受けました。
言語もPythonなので、これまで勉強してきたことが活かせるというので個人的には好感が持てます。
ただ問題はこれを外部からアクセスできるようにするのができるかどうかです。
ということで次回はFastAPIのプログラムを外部からアクセスできるようにするため、Deta Cloudという無料サービスを使ってみることにします。
ではでは今回はこんな感じで。
コメント