Flask-RESTful은 Python의 Flask 프레임워크를 기반으로 한 RESTful API 개발을 위한 라이브러리입니다. Flask-RESTful을 사용하여 모델 간의 관계를 설정하는 방법에 대해 알아보겠습니다.
1. 모델 선언
먼저, 간단한 예제를 위해 User
와 Post
라는 두 개의 모델을 선언해보겠습니다. 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을 사용하여 User
와 Post
의 API를 작성해보겠습니다. UserResource
클래스와 PostResource
클래스를 선언하여 각각 User
와 Post
객체에 대한 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>
엔드포인트에 UserResource
와 PostResource
를 매핑하였습니다.
이제 Flask-RESTful을 사용하여 모델 간의 관계를 설정하는 방법에 대해 알아보았습니다. Flask-RESTful을 통해 손쉽게 RESTful API를 개발할 수 있습니다.
참고:
- Flask-RESTful 공식 문서: https://flask-restful.readthedocs.io/
- Flask-SQLAlchemy 공식 문서: https://flask-sqlalchemy.palletsprojects.com/