Web APIとは?
- ネットワークを経由してデータをやり取りする方法の1つ
Web API サーバーとは?
- Web ブラウザ以外のアプリケーションから、HTTP 経由でデータや機能を提供するためのサーバーのこと
- データベースやその他のシステムと連携して、データを取得したり、処理したり、新しいデータを作成したりすることができる
pip install fastapi
pip install "uvicorn[standard]"
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/") # HTTPリクエストメソッド GETに対する関数
def read_root():
return {"message": "APIです"}
# パラメータを作成する
@app.get("/items/{item_id}")
def read_item(item_id):
return{"item_id":item_id, "item_name":"Tシャツ"}
# クエリパラメータを作成する
app = FastAPI()
items = ["Tシャツ","スカート","ブーツ"]
@app.get("/items")
def read_items(skip: int = 0, limit: Annotated[int, Query(ge=1, le=10)]=10):
return {"item": items[skip : skip + limit]}
# POSTを使ってリクエストボディを使う方法
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Union
app = FastAPI()
class Item(BaseModel):
name: str
price: float
description: Union[str, Nome] = Nome
@app.post("/items/")
def create_item(item: Item):
print(f"データを登録します:{item.name},{item.price},{item.description}")
return item
# ヘッダーとはリクエストやレスポンスにおいて付加情報を伝えるもの
from fastapi import FastAPI, Header
from typing import Union
app = FastAPI()
@app.get("/sample/")
def read_sample(
response: Response,
authorization: Union[str, Nome]= Header(defalut=Nome)
):
print(authorization)
response.headers["custom-header"]="12345"
return {"message":"ヘッダー情報を取得する"}
# 非同期処理
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/sleep_time/")
def sleep_time(sec: int):
await asyncio.sleep(sec)
return {"message":f"{sec}秒"}
cd コマンドで、main.pyがある階層まで移動
uvicorn main:app --reload
client.py
import request
res = requests.get("http://127.0.0.1:8000/items/111")
print(res.status_code)
print(res.text)
# クエリパラメータを作成する
res = requests.get("http://127.0.0.1:8000/items/?skip=1&limit=2")
print(res.status_code)
print(res.text)
# POSTを使ってリクエストボディを使う方法
import requests
res = requests.post(
"http://127.0.0.1:8000/items/",
json={"name": "Tシャツ", "price":2000, "description":"白Tシャツ"},
)
print(res.status_code)
print(res.text)
# ヘッダーとはリクエストやレスポンスにおいて付加情報を伝えるもの
import requests
res = requests.get(
"http://127.0.0.1:8000/sample/",
headers={"authorization": "Bearer: A1B2C3D4"},
)
print(res.status_code)
print(res.text)
print(res.headers)
# 非同期処理
import requests
import asyncio
import time
async def sleep_time(sec):
loop = asyncio.get_running_loop()
res = await loop.run_in_excutor(
None, requests.get, f"http://127.0.0.1:8000/sleep_time/?sec={sec}"
)
return res.text
asyncio def main()
print(f"main開始{time.strftime('%X')}")
results = await asyncio.gether(sleep_time(1), sleep_time(2))
print(results)
print(f"main終了{time.strftime('%X')}")
if __name__=="__main__":
asyncio.run(main())
Reference site
【Fast API 入門】PythonでWeb APIを作ってみよう!簡単にAPIが作れるフレームワークの紹介 〜初心者向け〜