POST 作業

FastAPI 入門

Matt Eckerle

Software and Data Engineering Leader

GET 與 POST 作業

GET 作業

  • 傳統用途:請求物件的資訊

  • 參數透過查詢字串傳送

  • 可由網頁瀏覽器送出

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

POST 作業

  • 傳統用途:建立新物件

  • 參數可經由查詢字串與請求本文傳送

  • 需要應用程式或框架

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

HTTP 請求本文(Body)

  • 資料在 HTTP 請求標頭之後傳送
  • 標頭指定本文編碼
  • 支援巢狀資料結構
  • API 最常用的編碼是 JSON 與 XML
  • JSON 是 FastAPI 的預設編碼

JSON 範例

# Create a record for a movie review
{"movie": "The Neverending Story",
 "review": {"num_stars": 4,
            "text": "Great movie!",
            "public": true}}
FastAPI 入門

使用 pydantic 的 BaseModel

pydantic:用來定義請求與回應本文綱要的介面

注意

我們把 Review 巢狀放在 MovieReview

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...