안녕하세요. fastapi에서 query, path, body 필드는 생각보다 많이 쓸 겁니다. 이번 시간에는 fastapi에서 Query parameter를 어떻게 쓰는지 몇 가지 예제를 통해 간단하게 배워보겠습니다.

 


 main.py입니다. read_root 함수에, keyword: str이라고 적었습니다. path에 있지도 않기 때문에, keyword는 Query 파라미터로 인식됩니다. docs를 보겠습니다.

 

 name이 keyword인 query가 있습니다. 그런데 옆에 required가 붙어 있습니다. 이는 없으면 안 된다는 의미입니다. 즉, keyword: str로 선언하면, Query parameter keyword는 string으로 받는 것을 기대합니다. 그리고, required이므로 반드시 필요한 파라미터가 됩니다.

 

 postman으로 날려보겠습니다. get /test로 불렀더니, 422가 떨어지고, field required라는 메세지가 뜹니다. keyword라는 query가 필요한데 없다는 것이 그 이유입니다.

 

 get /test?keyword=a를 입력해 봅시다. 이 경우, query로 keyword를 입력했고, 그 값은 a라는 의미입니다. keyword가 있었기 때문에 이번에는 제대로 된 응답값이 나오게 됩니다.

 


 Query를 optional로 만들기 위해서는 default=None 등으로 주시면 됩니다. 다시 docs를 켜 보겠습니다.

 

 그러면, keyword 옆에 required라는 메세지가 사라졌음을 볼 수 있습니다.

 

 정말 keyword 쿼리 파라미터가 없어도 잘 동작하는지 postman에서 실행시켜 보겠습니다. 그랬더니, 정상적으로 결과를 받아옴을 알 수 있습니다. 이제, keyword가 optional해야 하면서, 숫자 조합으로만 이루어져야 한다고 하겠습니다. 어떻게 하면 좋을까요? 이 때에는 regex를 이용하면 간단합니다.

 

 ^[0-9]+$는 숫자로만 이루어진 길이 1 이상의 문자열을 의미합니다. 해당 정규식에 맞지 않으면 vaildation error를 떨어트립니다.

 

 keyword에 3a를 넣어보겠습니다. 이것은 "^[0-9]+$"를 만족시키지 않습니다. a가 숫자가 아니기 때문입니다.

 

 keyword에 123을 넣었습니다. 그랬더니, 제대로 나오게 됩니다. string의 경우 min_length, max_length를 더 넣어서 최소 길이와 최대 길이 validation도 같이 해 줄 수 있습니다.

 


 조금 더 어려운 예제를 생각해 봅시다. 검색할 수 있는 옵션이 admin과 User만 있다고 해 보겠습니다. 다른 경우에는 모두 에러를 띄워야 합니다. 정규식으로 거르는 방법도 있겠지만, Enum으로 쉽게 거르는 방법도 있습니다.

 

 먼저 Type enum을 생성하겠습니다. USER의 값은 "USER"이고, ADMIN의 값은 "admin"입니다.

 

 keyword: Type이 핵심입니다. 우리는 Query param으로 str 대신에 Enum type을 넘겼습니다. docs를 열어서 어떤 것이 들어올 수 있는지 보겠습니다.

 

 USER와 admin만이 들어올 수 있음을 알 수 있습니다.