[python] Flask-RESTful에서 요청 데이터 밸리데이션 방법

Flask-RESTful은 파이썬의 웹 프레임워크인 Flask를 기반으로 한 RESTful API를 쉽게 구축하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 API 엔드포인트에서 받은 요청 데이터를 밸리데이션하여 유효성을 확인할 수 있습니다. 이번 글에서는 Flask-RESTful에서 요청 데이터를 밸리데이션하는 방법에 대해 알아보겠습니다.

1. 요청 데이터 밸리데이션을 위한 Flask-RESTful 확장 라이브러리 설치하기

Flask-RESTful에서 요청 데이터를 밸리데이션하기 위해서는 flask_restful.reqparse 모듈을 사용해야 합니다. 이 모듈은 Flask-RESTful에 기본으로 포함되어 있으므로 별도로 설치할 필요는 없습니다.

2. 요청 데이터를 밸리데이션하는 예제

아래는 GET 요청에서 name 파라미터를 받아온 후 이를 밸리데이션하는 예제입니다.

from flask import Flask
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

class Hello(Resource):
    def get(self):
        # 요청 데이터 파싱을 위한 RequestParser 객체 생성
        parser = reqparse.RequestParser()
        
        # name 파라미터를 문자열로 설정하고, required 옵션을 True로 설정하여 필수 파라미터로 지정
        parser.add_argument('name', type=str, required=True)

        # parse_args() 메소드를 사용하여 요청 데이터를 파싱하고, 밸리데이션 수행
        args = parser.parse_args()

        # 밸리데이션에 성공하면 Hello 메시지와 함께 name 값을 반환
        return {'message': f'Hello, {args["name"]}!'}
        
api.add_resource(Hello, '/hello')

if __name__ == '__main__':
    app.run(debug=True)

위 예제에서는 reqparse.RequestParser()를 사용하여 parser 객체를 생성합니다. 이 객체를 사용하여 add_argument() 메소드를 호출하여 원하는 파라미터를 설정할 수 있습니다. add_argument() 메소드의 required 옵션을 True로 설정하여 필수 파라미터로 지정할 수 있습니다.

parser.parse_args()를 호출하면 요청 데이터를 파싱하고, 밸리데이션을 수행합니다. 밸리데이션에 성공하면 해당 파라미터의 값에 접근하여 처리할 수 있습니다.

3. 요청 데이터 밸리데이션 에러 핸들링

Flask-RESTful은 자체적으로 요청 데이터 밸리데이션 에러를 핸들링하여 응답을 생성해줍니다. 따라서 별도로 에러 핸들링을 구현할 필요는 없습니다. 하지만 필요에 따라 특정 에러에 대한 커스텀 응답을 생성하고 싶은 경우, Flask-RESTful의 에러 핸들링 기능을 사용할 수 있습니다.

예를 들어, name 파라미터가 필수이지만 요청 데이터에 없을 경우, 커스텀한 에러 응답을 생성하는 예제입니다.

from flask import Flask
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

class Hello(Resource):
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('name', type=str, required=True)
        
        try:
            args = parser.parse_args()
            return {'message': f'Hello, {args["name"]}!'}
        except TypeError as e:
            return {'error': 'Invalid request'}, 400
        
api.add_resource(Hello, '/hello')

if __name__ == '__main__':
    app.run(debug=True)

위 예제에서는 try-except 구문을 사용하여 TypeError 예외(밸리데이션 에러)를 핸들링하고, 커스텀한 에러 응답을 생성합니다. 여기서는 {'error': 'Invalid request'}와 함께 상태 코드 400(Bad Request)를 반환하는 예제입니다.

4. 결론

이렇게 Flask-RESTful에서 요청 데이터를 밸리데이션하는 방법에 대해 알아보았습니다. Flask-RESTful을 사용하면 간단하게 요청 데이터를 밸리데이션하고 에러 핸들링을 할 수 있습니다. 개발 중인 RESTful API에서 요청 데이터 밸리데이션은 중요한 부분이므로, 적절한 밸리데이션 로직을 구현하여 안정성을 확보하는 것을 권장합니다.

참고 자료