쿠키 파라미터

쿼리 파라미터나 경로 파라미터와 비슷한 방식으로, 쿠키(cookie) 파라미터도 정의할 수 있어요.

출처: 공식문서

먼저 Cookie를 임포트해요:

from typing import Annotated

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: Annotated[str | None, Cookie()] = None):
    return {"ads_id": ads_id}

파이썬 3.10+ - Annotated를 안 쓰는 버전: 가능하면 Annotated 버전을 쓰는 걸 권해요.

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: str | None = Cookie(default=None)):
    return {"ads_id": ads_id}

Cookie 파라미터는 PathQuery와 똑같은 구조로 선언해요. 기본값을 비롯해 추가 검증·주석 파라미터를 모두 지정할 수 있어요:

from typing import Annotated

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: Annotated[str | None, Cookie()] = None):
    return {"ads_id": ads_id}

파이썬 3.10+ - Annotated를 안 쓰는 버전:

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: str | None = Cookie(default=None)):
    return {"ads_id": ads_id}

기술적 세부사항: CookiePathQuery의 "자매" 클래스예요. 둘 다 같은 공통 Param 클래스를 상속해요. 그런데 기억해야 할 게 있는데, fastapi에서 Query, Path, Cookie 등을 import하면 그것들은 사실 특별한 클래스를 반환하는 함수예요.

쿠키를 선언할 때 반드시 Cookie를 써야 해요. 그렇지 않으면 파라미터가 쿠키가 아니라 쿼리 파라미터로 해석되거든요.

브라우저는 쿠키를 특별한 방식으로, 그리고 뒤에서 조용히 처리하기 때문에 JavaScript로 쉽게 건드리지 못한다는 점도 알아 두세요. API 문서 UI(/docs)에 가면 path operation의 쿠키 문서를 볼 수는 있어요. 하지만 데이터를 채우고 "Execute"를 눌러도, 문서 UI는 JavaScript로 동작하니 쿠키는 전송되지 않고, 값을 하나도 안 적은 것처럼 오류 메시지를 보게 돼요.

요약 (Recap)

쿠키는 Cookie로 선언하고, 패턴은 QueryPath와 똑같아요.

더 알아보기 (Learn more)