ruriruriya

[RESTful API] Python Flask - API 개발을 위해 Resource 클래스 개발하는 코드 본문

☁️RestFul API (Python Flask)

[RESTful API] Python Flask - API 개발을 위해 Resource 클래스 개발하는 코드

루리야ㅑ 2023. 12. 6. 15:03
반응형

먼저 Resource를 관리할 폴더를 만들어 API를 만들기 위한 클래스를 작성한다.

1. flask_restful 라이브러리 import

API를 만들기 위해서는 flask_restful 라이브러리의 Resource 클래스를 상속, 즉 오버라이딩으로 만든다.

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

 

2. 클래스 작성

클래스 안에 HTTP 메소드와 동일한 함수명으로 오버라이딩 한다.

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeListResource(Resource):

	def post(self):

 

3. 클라이언트로부터 데이터 받기

클라이언트가 보내준 데이터가 있으면 그 데이터를 가장 먼저 받아준다.
get_json()  함수를 사용해서 json으로 받는다.
그리고 print로 확인해보기.

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeListResource(Resource):

	def post(self):

        	data = request.get_json()

        	print(data)

 

4. DB 저장할 부분 기본 구조

받아온 데이터 DB를 저장하기 위해 try except 구문 기본구조를 잡는다.

from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeListResource(Resource):

	def post(self):

        	data = request.get_json()

        	print(data)
            
            #받아온 데이터 DB 저장하는 부분
            try :
            	pass
        	except Error as e :
       			pass

 

4. try 구문에 DB 저장 프로그래밍

순차적으로 실행될 코드는 넣어준다.

  1. DB 연결 코드
  2. insert 쿼리 만들기
  3. 위의 쿼리에 매칭되는 변수 처리
  4. 커서 가져오기
  5. 위의 커리문 커서로 실행
  6. 자원해제
from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error

class RecipeListResource(Resource):

	def post(self):

        	data = request.get_json()

        	print(data)
            
            #받아온 데이터 DB 저장하는 부분
            try :
            	# 2-1. db에 연결하는 코드(틀)
            	connection = get_connection()

            	# 2-2. 쿼리문 만들기 - insert 쿼리만들기.
            	query = '''insert into recipe
                        (name, description, num_of_servings,
                            cook_time, directions)
                        values
                        (%s,%s,%s,%s,%s);'''
            	# 2-3. 위의 쿼리에 매칭되는 변수를 처리해 준다.
            	record = ( data['name'] , data['description'] , 
                      data['num_of_servings'], data['cook_time'],
                         data['directions'])

            	# 2-4. 커서를 가져온다.
            	cursor = connection.cursor()

            	# 2-5. 위의 쿼리문을, 커서로 실행한다.
            	cursor.execute(query, record)

            	# 2-6. 커밋해줘야, DB에 완전히 반영된다.
            	connection.commit()

            	# 2-7 자원해제
            	cursor.close()
            	connection.close() 
        	except Error as e :
       			pass

 

 

6. 에러 발생 시 메세지 설정

에러 발생 시 에러 메세지를 보여주는 부분이다.

-- 위에 생략
        	except Error as e :
       			print(e)
            		cursor.close()
            		connection.close()
            		return{"result":"fail", "error": str(e)},500

 

7. DB 저장되었을 시 메세지 설정

에러 없이 DB에 잘 저장되었다면 성공 메세지와 http 상태코드인 200 OK를 리턴한다.

-- 위에 생략
        	except Error as e :
       			print(e)
            		cursor.close()
            		connection.close()
            		return{"result":"fail", "error": str(e)},500
            
            # 클라이언트에게 DB 저장 후 응답
            return{"result":"success"}, 200
반응형