Python | FastAPIでAPI作成 ~その5:POSTでデータ登録
- 2022.07.18
- FAST API
今回は前回の続き、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オプションで対象のデータを取得することも確認できました。
ではまた!
-
前の記事
Python | FastAPIでAPI作成 ~その4:GETでデータ取得 2022.07.17
-
次の記事
Python | FastAPIでAPI作成 ~その6:DELETEでデータ削除 & Pandas活用 2022.07.18