1. 요청 파라미터 검증하기
사용자로부터 받은 요청에는 파라미터들이 포함되어 있을 수 있습니다. 이러한 파라미터들을 검증하여 예상치 못한 값이나 형식을 방지할 수 있습니다. Flask-RESTful에서는 reqparse
모듈을 제공하며, 이를 사용하면 간편하게 파라미터를 검증할 수 있습니다. 아래는 예제 코드입니다.
from flask_restful import Resource, reqparse
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True, help='name parameter is required')
class User(Resource):
def get(self):
args = parser.parse_args()
name = args['name']
# do something with the name parameter
api.add_resource(User, '/user')
위의 코드에서 reqparse.RequestParser()
를 사용하여 파라미터 검증을 위한 파서를 생성합니다. 그리고 add_argument()
메소드를 사용하여 각 파라미터의 이름, 타입, 필수 여부 등을 설정합니다. 요청을 처리할 메소드에서 parser.parse_args()
를 호출하여 요청 파라미터를 검증할 수 있습니다.
2. 인증과 권한 검증하기
API를 사용하는 사용자를 인증하고 권한을 검증하는 것은 보안적인 측면에서 매우 중요합니다. Flask-RESTful에서는 flask_httpauth
모듈을 이용하여 간단하게 인증과 권한 검증을 할 수 있습니다. 아래는 예제 코드입니다.
from flask import Flask
from flask_restful import Resource, Api
from flask_httpauth import HTTPTokenAuth
app = Flask(__name__)
api = Api(app)
auth = HTTPTokenAuth(scheme='Bearer')
tokens = {
'token123': 'user1'
}
@auth.verify_token
def verify_token(token):
if token in tokens:
return tokens[token]
class Secret(Resource):
@auth.login_required
def get(self):
# only authenticated users can access this resource
return {'message': 'You are authenticated!'}
api.add_resource(Secret, '/secret')
if __name__ == '__main__':
app.run()
위의 코드에서 HTTPTokenAuth()
를 사용하여 토큰 기반 인증을 설정합니다. verify_token()
데코레이터를 사용하여 토큰을 검증하는 함수를 정의하고, auth.login_required
데코레이터를 사용하여 해당 리소스에 대한 접근 권한을 설정합니다.
3. 데이터 유효성 검증하기
사용자로부터 받은 데이터의 유효성을 검증하는 것은 데이터베이스에 잘못된 값이 저장되지 않도록 하는 데에 중요합니다. Flask-RESTful 내부적으로 제공하는 fields
모듈을 사용하여 데이터의 유효성을 검증할 수 있습니다. 아래는 예제 코드입니다.
from flask_restful import Resource, fields, marshal_with
resource_fields = {
'id': fields.Integer,
'name': fields.String,
'age': fields.Integer
}
class User(Resource):
def post(self):
# validate user data here
user_data = {'id': 1, 'name': 'John', 'age': 25}
return marshal(user_data, resource_fields)
api.add_resource(User, '/user')
위의 코드에서 fields
모듈을 사용하여 각 필드에 대한 유효성 검증을 설정합니다. 그리고 marshal_with()
데코레이터를 사용하여 리소스 반환 시 필드 유효성 검증을 적용할 수 있습니다.
위의 방법들은 Flask-RESTful에서 요청에 대한 안전성 검증을 할 수 있는 일부 방법들을 소개한 것입니다. 실제로는 보다 복잡한 방법들이 존재하며, 사용자의 요구 사항 및 상황에 맞게 적절한 방법을 선택하여 사용해야 합니다.
참고 문서: