[python] Flask-RESTful을 활용하여 CRUD 기능 구현하기

Flask-RESTful은 Python 웹 프레임워크인 Flask의 확장판으로, RESTful API를 쉽게 구현할 수 있는 도구입니다. 이번 포스트에서는 Flask-RESTful을 사용하여 CRUD 기능(Create, Read, Update, Delete)을 구현하는 방법에 대해 알아보겠습니다.

필요한 패키지 설치하기

먼저 Flask-RESTful 패키지를 설치해야 합니다. 아래의 명령어를 사용하여 패키지를 설치하세요.

pip install flask-restful

또한 Flask 패키지도 설치되어있어야 합니다.

pip install flask

Flask-RESTful 리소스 생성하기

Flask-RESTful는 리소스(Resource)라는 개념을 통해 API를 관리합니다. 각각의 리소스는 자신의 엔드포인트(url)와 HTTP 메서드(method)를 가지고 있습니다. 예를 들어, /users 엔드포인트에 대한 GET 요청은 모든 사용자 정보를 반환하는 역할을 할 수 있습니다.

from flask import Flask
from flask_restful import Api, Resource

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

class UsersResource(Resource):
    def get(self):
        # 사용자 정보 조회 로직 구현
        return {'users': 'user1, user2, user3'}

api.add_resource(UsersResource, '/users')

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

위의 코드에서는 UsersResource라는 클래스를 생성하고, get 메서드를 구현하여 사용자 정보 조회 로직을 처리하도록 했습니다. 또한, api.add_resource() 함수를 사용하여 UsersResource 클래스를 /users 엔드포인트에 매핑시켰습니다.

CRUD 기능 구현하기

이제 CRUD 기능을 구현해보겠습니다. 아래의 코드는 사용자 생성, 조회, 수정, 삭제 기능을 포함하고 있습니다.

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

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

users = []

class UsersResource(Resource):
    def get(self):
        # 모든 사용자 정보를 반환
        return {'users': users}
    
    def post(self):
        # 사용자 생성
        parser = reqparse.RequestParser()
        parser.add_argument('name', type=str, required=True, help='Name is required')
        parser.add_argument('age', type=int, required=True, help='Age is required')
        args = parser.parse_args()
        
        user = {'name': args['name'], 'age': args['age']}
        users.append(user)
        
        return {'message': 'User created', 'user': user}, 201
    
class UserResource(Resource):
    def get(self, user_id):
        # 특정 사용자 정보를 반환
        user = next((user for user in users if user['id'] == user_id), None)
        if user:
            return {'user': user}
        else:
            return {'message': 'User not found'}, 404
    
    def put(self, user_id):
        # 특정 사용자 정보를 수정
        parser = reqparse.RequestParser()
        parser.add_argument('name', type=str, required=True, help='Name is required')
        parser.add_argument('age', type=int, required=True, help='Age is required')
        args = parser.parse_args()
        
        user = next((user for user in users if user['id'] == user_id), None)
        if user:
            user['name'] = args['name']
            user['age'] = args['age']
            return {'message': 'User updated', 'user': user}
        else:
            return {'message': 'User not found'}, 404
    
    def delete(self, user_id):
        # 특정 사용자 삭제
        user = next((user for user in users if user['id'] == user_id), None)
        if user:
            users.remove(user)
            return {'message': 'User deleted'}
        else:
            return {'message': 'User not found'}, 404

api.add_resource(UsersResource, '/users')
api.add_resource(UserResource, '/users/<int:user_id>')

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

위의 코드에서는 UsersResource 클래스는 모든 사용자 정보를 반환하고, UserResource 클래스는 특정 사용자에 대한 조회, 수정, 삭제 기능을 구현합니다. POST, PUT, DELETE 요청은 reqparse 패키지를 사용하여 요청 파라미터를 파싱합니다.

결론

이번 포스트에서는 Flask-RESTful을 사용하여 CRUD 기능을 구현하는 방법에 대해 알아보았습니다. Flask-RESTful은 간편한 API 개발을 위해 많은 기능과 도구를 제공하며, 이를 통해 개발자는 더 빠르게 RESTful API를 구축할 수 있습니다.

더 자세한 정보는 Flask-RESTful 공식 문서를 참고하세요.