개발

[FastAPI] HTTP Request를 사용하는 두 가지 방법

1. HTTP Request의 작은 요소 타입을 선언해서 사용

- path parameters

- Query paramenters

- Headers

- Cookies

 

이 방식을 사용하면 FastAPI는 해당 데이터의 유효성을 검사하고 변환하며 API에 대한 문서를 자동으로 생성한다. 그러나 Request에 직접 엑세스해야 하는 상황이 있다.

 

 

2. Request Object에 (통째로) 직접 접근해 사용 [공식문서]

FastAPI는 내부적으로 Starlette를 사용하고 있고, 필요하다면 FastAPI 대신 Starlette의 Request Object를 직접 사용할 수 있다.

- 주의사항: Request Object를 직접 가져오면, FastAPI에 의해 유효성 검사와 문서화가 되지 않는다.

from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
	client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

path operation function 내에서 클라이언트의 IP address/host를 가져오기 위해서는 request에 직접적으로 접근해야 한다.

path 연산 함수 파라미터에 Request 타입을 선언하면, FastAPI는 Request가 파라미터로 전달된걸 알게된다.

 

위 코드를 실행하고 브라우저에서 http://0.0.0.0/items/1로 접속하면 아래와 같은 결과를 볼 수 있다.

{"client_host":"0.0.0.0", "item_id":"1"} 

 

Request object에 대한 자세한 내용은 여기서 읽을 수 있다.