本日の目的・ゴール
目的
CRUDの基礎をつかむためにほかのAPIやライブラリは除いて学習
https://youtu.be/m_4PpxsMtVU?si=a2gmSngkM9gKAkAr
YOUTUBEに乗っていたコードを参考にswaggerで実行CRUDの登録や更新、削除の感覚をつかむ
ゴール
CRUDを理解すること
学んだこと
1 毎日学んだコードを記録するために新しいフォルダとファイルの作成をコマンドで作成した。今後はコードを消さずにすべて記録する
mkdir week1
mkdir week2
mv main.py client.py week1
New-Item week2/main2.py
New-Item week2/client2.py
from fastapi import FastAPI
# fastAPIクラスをインポート
app = FastAPI()
@app.get("/")
# デコレータ リクエストメゾットがGETでURLがドメインまでのリクエストが来た時に呼び出される
def read_root():
return {"message":"サブAPIです"}
@app.post("/items/")
def create_item(name:str, price: float):
return item
@app.put("/items/{item_id}")
def update_item(item_id: int , name: str, price: float):
return {"name": name, "price": price}
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
return {"message": f"Item {item_id} deleted successfully"}
躓いたこと
1 今日は新しく作成したmain2.pyでコードを実行したが、ファイル名が変更になったため今まで使っていたサーバーを起動するコマンドが使えなかった。
このコマンドを使えばサーバー起動できるものと何も考えず使用していたため、
構造を理解するのに役立った。
uvicorn week2.main2:app --reload
uvicorn <ファイル名>:<変数名> --reload
2 研修中ではLinuxを利用してコマンドを打っていたため、ファイル作成といえばtouchだったが、ターミナルの種類によって使うコマンドが異なることを学んだ。
New-Item week2/main2.py
New-Item week2/client2.py
3 POSTリクエストを /docs 上で実行したときに「500 Internal Server Error」が発生した。
@app.post("/items/")
def create_item(name: str, price: float):
return item
itemが定義されていないというただの打ち間違えによるエラーだったが、エラーを知られていく中で「リクエストボディ」という概念を知った。
以下chatgptより引用
💡 FastAPIでサーバーにデータを送る3つの方法
FastAPIでは、クライアント(ブラウザや他のプログラム)からサーバーにデータを送るとき、主に3つの方法があります。
方法 | 名称 | 使い方 | 例 | 主な用途 |
---|---|---|---|---|
① URLの中 | パスパラメータ | /items/{id} |
/items/3 |
特定のデータを指定する(例:3番のアイテム) |
② URLの後ろ | クエリパラメータ | /items/?name=nana&price=2000 |
/items/?name=nana&price=2000 |
検索・条件指定・簡単な値の受け渡し |
③ リクエストの本文(Body) | リクエストボディ | JSON形式で本文に送る | { "name": "nana", "price": 2000 } |
データ登録・更新などで複数データをまとめて送る |