You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.4 KiB

쿠키 매개변수 모델

관련있는 쿠키들의 그룹이 있는 경우, Pydantic 모델을 생성하여 선언할 수 있습니다. 🍪

이를 통해 여러 위치에서 모델을 재사용 할 수 있고 모든 매개변수에 대한 유효성 검사 및 메타데이터를 한 번에 선언할 수도 있습니다. 😍

/// note | 참고

이 기능은 FastAPI 버전 0.115.0 이후부터 지원됩니다. 🤓

///

/// tip | 팁

동일한 기술이 Query, Cookie, 그리고 Header에 적용됩니다. 😎

///

Pydantic 모델을 사용한 쿠키

Pydantic 모델에 필요한 쿠키 매개변수를 선언한 다음, 해당 매개변수를 Cookie로 선언합니다:

{* ../../docs_src/cookie_param_models/tutorial001_an_py310.py hl[9:12,16] *}

FastAPI는 요청에서 받은 쿠키에서 각 필드에 대한 데이터를 추출하고 정의한 Pydantic 모델을 줍니다.

문서 확인하기

문서 UI /docs에서 정의한 쿠키를 볼 수 있습니다:

/// info | 정보

명심하세요, 내부적으로 브라우저는 쿠키를 특별한 방식으로 처리하기 때문에 자바스크립트가 쉽게 쿠키를 건드릴 수 없습니다.

/docs에서 API 문서 UI로 이동하면 경로 작업에 대한 쿠키의 문서를 볼 수 있습니다.

하지만 아무리 데이터를 입력하고 "실행(Execute)"을 클릭해도, 문서 UI는 자바스크립트로 작동하기 때문에 쿠키는 전송되지 않고, 아무 값도 쓰지 않은 것처럼 오류 메시지를 보게 됩니다.

///

추가 쿠키 금지하기

일부 특별한 사용 사례(흔하지는 않겠지만)에서는 수신하려는 쿠키를 제한할 수 있습니다.

이제 API는 자신의 쿠키 동의를 제어할 수 있는 권한을 갖게 되었습니다. 🤪🍪

Pydantic의 모델 구성을 사용하여 추가(extra) 필드를 금지(forbid)할 수 있습니다:

{* ../../docs_src/cookie_param_models/tutorial002_an_py39.py hl[10] *}

클라이언트가 추가 쿠키를 보내려고 시도하면, 오류 응답을 받게 됩니다.

API가 거부하는데도 동의를 얻기 위해 애쓰는 불쌍한 쿠키 배너(팝업)들. 🍪

예를 들어, 클라이언트가 good-list-please 값으로 santa_tracker 쿠키를 보내려고 하면 클라이언트는 santa_tracker 쿠키가 허용되지 않는다오류 응답을 받게 됩니다:

{
    "detail": [
        {
            "type": "extra_forbidden",
            "loc": ["cookie", "santa_tracker"],
            "msg": "Extra inputs are not permitted",
            "input": "good-list-please",
        }
    ]
}

요약

Pydantic 모델을 사용하여 FastAPI에서 쿠키를 선언할 수 있습니다. 😍