2025. 8. 27. 15:31ㆍProgramming Language/Python
웹에서 요청을 받는 데이터들에 대해서는 빈번하게 입력받은 데이터에 대한 검증들이 필요한 것들이 존재한다.
간단하게 메일 주소, 비밀번호의 길이등, 원하는 길이, 형태가 존재하는 경우들이 있기 때문에 이들을 전달받을때 물론 스크립트에서 걸러져서 들어오겠지만 이런 저런 문제들(보안등..)로 인해서 서버측에서도 추가적으로 이를 검증해야할 때가 많다.
FastAPI에서 이런 검증들을 할 수 있는 방법에 대해서 확인해보자.
1. Query
fastapi의 Query 모듈은 이런 설정들을 달아둘 수 있는 도구가 된다.
먼저 Query를 fastapi로 하여금 import 하고
기본 FastAPI의 형태를 구성해주자.
이제 함수를 하나 선언해주고
이제 id와 password를 받을 수 있도록 만들어주고
이제 요청에 해당 값들을 전달하면 받아줄 수 있는 형태가 되었다.
만약 이때 pw에 해당하는 비밀번호를 8자리로 제한해야한다는 조건이 생겼다면 이때 Query가 사용된다.
1. default
먼저 내부에 간단하게 기본적으로 설정할 수 있는 인자는 default 가 있다.
이는 해당 값이 요청에 담겨 오지 않을 경우 해당 변수에 어떤것을 담을지를 설정하는 것으로 이전과 같이 None이 나오길 기대한다면
이렇게 넣어주면 된다.
그리고 전달 받은 값을 확인하기 위해 받은 값을 그대로 return할 수 있도록 하자.
이제 사용자가 요청을 아래와 같이 아무값도 전달하지 않는다면
이렇게 pw도 null, 즉 None을 담고 있었다는 것을 확인할 수 있다.
이제 여기에 길이 제한을 둬보자 .
2. max_length, min_length
길이를 제한하는 인자는 max_length로 뒤에 int값을 넣으면 그 int 값에 해당하는 길이만의 데이터를 받는다.
이제 값을 9자리를 보내보자.
보면 너무 길이가 길다 라고 나오면서 pw라는 쿼리에서 문제고 최대 길이는 8자리다 라고 알려준다.
동일하게 min_length인자도 있고
이러면 어떤 인자가 길이가 짧고 최소 3글자는 되어야한다고 알려준다.
3. pattern
pattern 인자는 여기에 정규식을 설정해서 매개변수가 해당 정규식에 맞는 값일때 받아준다.
이메일을 받는 정규식을 하나 만들어서 pattern에 넣어주자
이러면 데이터를 전달할때
정규식 패턴에 맞추라고 보여준다.
이메일 형식으로 맞춰보면
정상적으로 전송되는것을 볼 수 있다.
4. title
해당 값은 자동으로 생성되는 문서의 메타데이터의 title에 해당하는 부분으로 Swagger UI, OpenAPI에 표시되게 된다.
이렇게 사용하면 자동으로 생성되는 문서에서 확인이 가능한데 그중에 docs로 접속하는 Swagger UI에서는 해당 부분이 보이지 않으나
redoc으로 가보면
이렇게 표시되는 것을 볼 수 있다.
5. description
해당 값은 자동으로 생성되는 문서의 메타데이터의 description에 해당하는 부분으로 Swagger UI, OpenAPI에 표시되게 된다.
이 값은 Swagger UI에서도 확인이 가능하다
또한 redoc에서도 확인이 가능하다.
6. alias
alias는 해당 파라미터를 다른 명칭으로 받아도 해당 파라미터에서 받은것 처럼 설정해주는 것으로 서버에서 파라미터의 명칭을 param으로 만들었다면 사용자도 무조건 param이라고만 보내야 받아줬던 것을 원하는 다른 명칭으로 전달했을 때도 param에 담아지도록 설정해주는 것이다.
한번 설정해주고
이렇게 설정했을때 사용자가 param_best1과 2로 요청을 보내면
이렇게 설정한 매개변수에서 받아서 사용하는 것을 볼 수 있다.
물론 이렇게 설정하면 문서에서는 해당 변수의 명칭 자체가 변경된것으로 나온다
7. deprecated
해당 값도 메타데이터에 대한 내용으로 사용은 되지만 곧 사라질 예정이라는 내용을 암시하는 인자이다.
값은 True와 False로 설정이 가능하다.
매개변수에 해당 옵션을 설정 해주면
보면 사용에는 문제가 없는데
이렇게 deprecated되어 있음이 표시된다.
2. List로 값 요청 받기
쿼리스트링으로 같은 key로 여러가지 값을 한번에 보내려면 서버에서 이걸 리스트로 받을 수 있어야한다.
이럴때 typing의 Union과 List가 사용된다
먼저 List를 typing에서 import 해주고
파라미터를 하나 매개변수에 받게 하는데 이때 Union의 내부의 전달되는 타입을 List로 하고 List는 내부에 str을 받기 위해 [str]을 넣어준다.
근데 이렇게만 해두고 파라미터를 동일하게 해서 전달하면 아래와 같은 에러가 나오는데
FastAPI측에서는 함수의 인자가 List[...]일때 아무런 힌트가 없다면 이건 Request Body로 인식해서 JSON 배열이 오기를 기대한다.
그래서 위와 같은 상황에서 쿼리스트링은 무시하고 "값이 아예 없는데?"라고 응답하는 것이다.
그렇기에 위와 같이 쿼리 파라미터로 List를 받고 싶다면 Query를 사용해서 이게 쿼리 파라미터임을 명시해줘야만 한다.
이렇게 정상적으로 응답을 만들어주는 것을 확인할 수 있다.
물론 여기에 default 값을 설정해주면
요청에 값을 담지 않아도 문제 없이 받아주는 것도 볼 수 있다.
이렇게 설정한 값들은 Swagger UI에서 내용을 확인 할 수 도 있다.
이렇게 array로 받는다고 나와 있요 요소를 원한다면 추가할 수 있게 되어 있다.
추가로 위 같은 경우 기본 값으로 List를 설정하는것도 가능하다.
추가로 Union[List[str]] 대신에 그냥 list를 사용하는 것도 가능하다.
'Programming Language > Python' 카테고리의 다른 글
FastAPI - RequestBody 다중 매개변수 (1) | 2025.08.29 |
---|---|
FastAPI - 경로 매개변수의 검증 (0) | 2025.08.27 |
FastAPI - Request Body (1) | 2025.08.27 |
FastAPI - 쿼리 매개변수 (0) | 2025.08.26 |
FastAPI 기본 (2) | 2025.08.26 |