FastAPIの動作確認
公式チュートリアルを見ながらmain.pyを作成し、ライブサーバーを実行する
同一ネットワーク下で以下のようにGETすると、jsonが吐き出されます
curl http://127.0.0.1:8000
→{"message":"Hello World"}
例えば、複数のセンサーがつながったラズパイを用意して、FastAPI経由で特定のセンサーデータを取得したい場合は以下のようなmain.pyを作成すれば良い
from fastapi import FastAPI
app = FastAPI()
@app.get("/sensorA")
async def root():
return {"time": "yyyy:mm:dd","temp":"25degree"}
@app.get("/sensorB")
async def root():
return {"time": "yyyy:mm:dd","humid":"40%"}
@app.get("/sensorC")
async def root():
return {"time": "yyyy:mm:dd","co2":"400ppm"}
もちろん、ライブサーバーを立てたり閉じたりするのは面倒なので、以下のようにコードが叩かれたらサーバーも常に起動するようにしても良い
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/sensorA")
async def root():
return {"time": "yyyy:mm:dd","temp":"25degree"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
ラズパイにlocalhostのポート8000でライブサーバーを立てた場合は「<ラズパイIP>:8000」でGETできる
センサーAにレスポンスが来た際に以下のようにして、センサーAのデータが取得できるようにする。
sensorA_dataスクリプトに取得スクリプトを買いとけば良い
from fastapi import FastAPI
import sensorA
app = FastAPI()
@app.get("/sensorA")
async def root():
sensorA_data = sensorA.get_data()
return sensorA_data
Nginxに取得データ情報を飛ばし、確認
from fastapi import FastAPI
import sensorA
app = FastAPI()
@app.get("/sensorA")
async def root():
sensorA_data = sensorA.get_data()
return sensorA_data
外から作成したスクリプトを呼ぶ際はcurl
https://qiita.com/danishi/items/07dd1b2f2a28255f7a85
メモ
- GET、POSTの使い分け
- 忘れっぽい言葉「冪等性」
- FastAPIの特徴
- "async"による並行処理(非常に面白いハンバーガーの例えが載っています)
- データモデルを用いて引数をカプセル化するのが常套手段らしい
- stripeのAPIを参考に