POST の操作

FastAPI入門

Matt Eckerle

Software and Data Engineering Leader

GET と POST の比較

GET の操作

  • 主な用途: オブジェクト情報の取得

  • パラメータはクエリ文字列で送信

  • ブラウザから送信可能

api = "http://moviereviews.co/reviews/1"
response = requests.get(api)

POST の操作

  • 主な用途: 新規オブジェクトの作成

  • パラメータはクエリ文字列またはリクエストボディで送信

  • アプリやフレームワークが必要

    • 例: cURL, requests
api = "http://moviereviews.co/reviews/"
body = {"text": "A great movie!"}
response = requests.post(api, json=body)
FastAPI入門

HTTP リクエストボディ

  • データは HTTP リクエストヘッダの後に送信
  • ヘッダでボディのエンコーディングを指定
  • ネスト構造をサポート
  • API では JSON と XML が一般的
  • FastAPI のデフォルトは JSON

JSON の例

# 映画レビューのレコードを作成
{"movie": "The Neverending Story",
 "review": {"num_stars": 4,
            "text": "Great movie!",
            "public": true}}
FastAPI入門

pydantic の BaseModel を使う

pydantic: リクエスト/レスポンスボディのスキーマ定義用インターフェース

注意

MovieReview の中に Review をネストします

from pydantic import BaseModel

class Review(BaseModel):
    num_stars: int
    text: str
    public: bool = False

class MovieReview(BaseModel):
    movie: str
    # Nest Review in MovieReview
    review: Review
FastAPI入門

POST の処理

新規映画レビューを作成する POST エンドポイント:

  • エンドポイント: /reviews
  • 入力: MovieReview(前スライド)
  • 出力: db_review(別途定義)
@app.post("/reviews", response_model=DbReview)
def create_review(review: MovieReview):
    # Persist the movie review to the database
    db_review = crud.create_review(review)
    # Return the review including database ID
    return db_review
1 https://fastapi.tiangolo.com/tutorial/sql-databases/#crud-utils
FastAPI入門

練習しましょう!

FastAPI入門

Preparing Video For Download...