概要
タイトルの通り、FastAPIを触ってみた記事になります。
ごくごく初歩的なところから、将来的にはどんどん思いついた機能を実装していければと思っています!
環境
デバイス: MacBook Air (M1, 2020)
OS: macOS Sequoia 15.1.1
ターミナル: zshrc
Python: 3.11.9
fastapi: 0.115.6
やったこと
初歩の初歩ということで、簡単にGET、POSTリクエストを受け付けるアプリケーションを作成してみます。
GETの内容は固定の文字列を返却し、POSTの内容はリクエストボディを受け取って、その内容をそのまま返却するというイメージでいきます。
GETメソッドを作成するには@app.get
、POSTメソッドを作成するには@app.post
になります。
パスを振り分ける際は、getやpostの後ろに/xxx
を命名しておきます。
下記コードでいうところの@app.get("/")
はデフォルトパスに、@app.post("/post")
は/postというパスにリクエストができるということになります。
そして、/postにはリクエスト時に必要なリクエストボディを指定するようにしています。(defの括弧内が
必要なリクエストボディということですね)
以下のコードはデフォルトパスにアクセスすると、{"Hello":"World"} が返却されます。
また、/postにアクセスするとリクエストボディの内容が返却されます。
import uvicorn
from fastapi import FastAPI # FastAPIを使うために必要
from pydantic import BaseModel # リクエストbodyを定義するために必要
app = FastAPI()
class post_string(BaseModel):
param: str
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.post("/post")
def return_post_string(p: post_string):
return p.param
if __name__ == "__main__":
uvicorn.run("main:app", reload=True)
実際にcurlでリクエストしてみると以下の出力イメージになります。
# GET
curl -sX "GET" "http://localhost:8080/"
# 出力内容 {"Hello":"World"}
# POST
curl -sX "POST" "http://localhost:8080/post" -d "{\"param\": \"test\"}" -H 'Content-Type: application/json'
# 出力内容 "test"
おわりに
まだまだ、初歩的なところしか触れられていませんが、FastAPIの足がかりにはちょうどいい内容になったかなと思います。(色々コードの中身については触れられていませんが、たくさんの方が説明しているので端折ってしまいましたmm)
いろいろなアイディアと結びつけてFastAPIを有効活用していければと思います。
今あるアイディアとしてはPOSTメソッドでURL引き渡して画像・動画を保存するとか、そんなことができたら面白いかなと思っていたりしています!