0
0

I tried creating a Web API with Python [Introduction to Fast API]

Last updated at Posted at 2024-01-31

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が作れるフレームワークの紹介 〜初心者向け〜

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0