Python | FastAPIでAPI作成 ~その5:POSTでデータ登録

Python | FastAPIでAPI作成 ~その5:POSTでデータ登録

今回は前回の続き、POSTについて検証しました。

前回の記事はこちらから↓

POSTを使ってデータを追加する

公式のドキュメントはこちらから↓

GETはデータ取得だったのに対して、POSTはデータを追加するイメージです。

以下の様に、データを追加するプログラムを作成します。

プログラム

前回のプログラムを改造します。

BaseModelのインポート

pydanticのBaseModelが、Postを利用する上で必要とのことで追加します。

それに伴い、class Item(BaseModel)を定義しています。

@app.post(“/User/”)の追加

post時の処理を追加します。

今回はPOSTされたデータを、辞書リスト(User_list)にappendします。

ソース

ソースは以下の通りです。

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    ID: str
    Name: str
    Class: str

app = FastAPI() #インスタンスを作成

User_list =[
    {"ID":"M001","Name":"Takashi","Class":"A"},
    {"ID":"M002","Name":"Hanako","Class":"A"},
    {"ID":"M003","Name":"Hiroshi","Class":"B"},
    {"ID":"M004","Name":"Kyoko","Class":"B"},
    ]

# Get /Users/ : 全件取得
# Get /Users/{ID} :特定のIDのみ取得
# POST /Users/ :ユーザの登録

#curl http://localhost:8000/Users/
@app.get("/Users/")
async def users():
    return User_list


#curl http://localhost:8000/Users/{ID}
@app.get("/Users/{u_id}")
async def users(u_id:str):
    return list(filter(lambda item : item['ID']==u_id, User_list))


#curl -X POST -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"M005\", \"Name\":\"Aya\", \"Class\":\"C\"}," http://localhost:8000/Users/ 
@app.post("/Users/")
async def users(user: Item):
    User_list.append({"ID": user.ID,"Name":user.Name,"Class":user.Class})
    return User_list

POSTの検証

ではいつもと同様にuvicornでプログラムを実行します。

ブラウザのURL欄では「GET」しか実行できないことから、今回は「コマンドプロンプト」の「curl」を用います。(http://localhost:8000/docsでも可能)

Curlコマンドとは?

IT用語辞典では以下のように説明されています。

cURLとは、主にUNIX系OSでよく利用されるコマンドおよびプログラムの一つで、様々なプロトコル(通信手順)を用いてURLで示されるネットワーク上の場所との間でデータの送受信を行うもの。オープンソースソフトウェアとして公開されている。

https://e-words.jp/w/CURL.html

今まではUNIX系OSのコマンドとして利用されていましたが、Windows10からCurlが標準搭載されるようになったとのことです。

こちらをもちいてPOSTの検証を行います。

①Curlの検証:コマンドプロンプトを起動

Window + R -> cmd で起動

②Curlの検証:Curlコマンドを実行

試しにmiseruitのトップページをGETするならば以下のコマンドです。

curl https://miseruit.com

すると、WEBサーバ側にGETオプションの問い合わせがされます。

WEBサーバ側からは、miseruit.comのトップページのページが返ってきます。↓は本サイトのHTMLページです。(これを視覚的に見えるようにしているのがブラウザ)

POSTの場合は「curl POST」となりますが、POSTしたいデータ種によってオプションが異なります。ここについては、また別途説明します。

POST時のエラー(Curl:Windowsのコマンドプロンプト使用時の注意点)

私の開発環境はWindowsですが、コマンドが通らない点に躓きました。。。

以下の様なエラー↓

curl: (6) Could not resolve host: application

WIndowsは文字列のクォートルールが異なるために生じるエラーの様です。(こちらの情報を参考)

Windowsで実行するには、以下の様に「\:バックスラッシュ」を付ける必要があります。

curl -X POST -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"M005\", \"Name\":\"Aya\", \"Class\":\"C\"}" http://localhost:8000/Users/ 

結果

上記の問題を解決し、結果は以下のようになりました。

以下のcurlコマンドを実行することで、新たなレコードが追加されていることが分かります。

curl -X POST -H “accept: application/json” -H “Content-Type: application/json” -d “{\”ID\”:\”M005\”, \”Name\”:\”Aya\”, \”Class\”:\”C\”},” http://localhost:8000/Users/

またGetオプションで対象のデータを取得することも確認できました。

ではまた!