[python] Flask-RESTful에서 모델 간 관계 설정 방법

Flask-RESTful은 Python의 Flask 프레임워크를 기반으로 한 RESTful API 개발을 위한 라이브러리입니다. Flask-RESTful을 사용하여 모델 간의 관계를 설정하는 방법에 대해 알아보겠습니다.

1. 모델 선언

먼저, 간단한 예제를 위해 UserPost라는 두 개의 모델을 선언해보겠습니다. User 모델은 사용자 정보를 저장하고, Post 모델은 게시물 정보를 저장합니다.

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50))
    posts = db.relationship('Post', backref='author', lazy='dynamic')

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

위의 코드에서는 User 모델과 Post 모델 사이에 일대다 관계(one-to-many relationship)를 설정하였습니다. User 모델은 posts라는 속성을 가지며, 이 속성은 Post 모델과의 관계를 나타냅니다.

2. API 클래스 작성

이제 Flask-RESTful을 사용하여 UserPost의 API를 작성해보겠습니다. UserResource 클래스와 PostResource 클래스를 선언하여 각각 UserPost 객체에 대한 API를 만들어줍니다.

from flask_restful import Resource

class UserResource(Resource):
    def get(self, user_id):
        user = User.query.get(user_id)
        return user

    def post(self):
        # 사용자 생성 코드 작성
    
    def put(self, user_id):
        # 사용자 수정 코드 작성
    
    def delete(self, user_id):
        # 사용자 삭제 코드 작성

class PostResource(Resource):
    def get(self, post_id):
        post = Post.query.get(post_id)
        return post

    def post(self):
        # 게시물 생성 코드 작성
    
    def put(self, post_id):
        # 게시물 수정 코드 작성
    
    def delete(self, post_id):
        # 게시물 삭제 코드 작성

위의 코드에서는 UserResource 클래스와 PostResource 클래스가 각각 GET, POST, PUT, DELETE 요청을 처리할 수 있도록 작성되었습니다.

3. API 엔드포인트 설정

마지막으로, Flask 애플리케이션에서 API 엔드포인트를 설정해주어야 합니다. 다음은 간단한 예제입니다.

from flask import Flask
from flask_restful import Api

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

api.add_resource(UserResource, '/users/<int:user_id>')
api.add_resource(PostResource, '/posts/<int:post_id>')

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

위의 코드에서는 /users/<int:user_id>/posts/<int:post_id> 엔드포인트에 UserResourcePostResource를 매핑하였습니다.

이제 Flask-RESTful을 사용하여 모델 간의 관계를 설정하는 방법에 대해 알아보았습니다. Flask-RESTful을 통해 손쉽게 RESTful API를 개발할 수 있습니다.


참고: