RestFul API

RestFul API์—์„œ POSTํ•˜๊ธฐ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜๋ฉด DB์— ์ €์žฅํ•˜๊ธฐ) : mysql_connection์™€ config ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

567Rabbit 2024. 5. 20. 17:12

DB ์„ค๊ณ„ํ•˜๊ธฐ

 

์ฝ”๋“œ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„ ์ˆ˜์ •ํ•ด์„œ ์ž…๋ ฅํ•œ๋‹ค)

-- recipe_db ์—๋งŒ ์ „์šฉ์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค

use mysql;
create user 'recipe_db_user'@'%' identified by '๋น„๋ฐ€๋ฒˆํ˜ธ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•œ๋‹ค';
grant ALL privileges on recipe_db.* to 'recipe_db_user'@'%';

 

 

 

aws ์—”๋“œํฌ์ธํŠธ ๋ณต์‚ฌ

 

 

 

 

 

MySQL Hostname์— ๋ถ™์—ฌ๋„ฃ๊ธฐ

 

 

 

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•ž์ „์— ์„ค์ •ํ•œ๋Œ€๋กœ ์ž…๋ ฅํ•˜๊ธฐ

 

 

 

 

 

 

DB๋กœ ๋“ค์–ด๊ฐ€ recipe Table์„ ๋งŒ๋“ ๋‹ค

 

 

 

 

 

 

 

Postman ์‹คํ–‰ํ•˜๊ธฐ

 

New -> collection ํ•ด๋„ ๋˜๊ณ , +๋ชจ์–‘์„ ๋ˆŒ๋Ÿฌ์„œ Blanck collection ํ•ด๋„ ๋œ๋‹ค.

 

 

 

 

 

...  ๋ˆŒ๋Ÿฌ์„œ Add request

 

 

 

 

 

 

 

Body์— Data๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ Body ํด๋ฆญ

 

 

 

 

 

raw(์›๋ณธ ๋ฐ์ดํ„ฐ)๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„ ์ €์žฅ, ๋ฐ์ดํ„ฐ๋Š” json ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•จ

- json ํ˜•์‹์€ "ํฐ๋”ฐ์˜ดํ‘œ"๋งŒ ์‚ฌ์šฉํ•œ๋‹ค

 

 

 

 

 

 

VSCode

 

VScode์— app.py ํŒŒ์ผ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ณธ API ๋งŒ๋“ค๊ธฐ

 

 

 

 

 

 

app.py ์ž‘์„ฑ

 

 

 

 

 

recipe.py ์ž‘์„ฑ

- ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋งค์นญ๋˜๋Š” ๋ณ€์ˆ˜๋Š” %s๋กœ ํ•œ๋‹ค

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) :
        
        # 1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์ค€๋‹ค.
        data = request.get_json()
        
        # 2. ์ด ์ •๋ณด๋ฅผ DB์— ์ €์žฅํ•œ๋‹ค.
        try :
            ### 1. DB์— ์—ฐ๊ฒฐ
            connection = get_connection()
            
            ### 2. ์ฟผ๋ฆฌ๋ฌธ ๋งŒ๋“ค๊ธฐ
            query = '''insert into recipe (name, description, num_of_servings, cook_time, directions) values ( %s , %s , %s , %s , %s);'''
            
            ### 3. ์ฟผ๋ฆฌ์— ๋งค์นญ๋˜๋Š” ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ \
            record = (data['name'],data['description'],data['num_of_servings'],data['cook_time'],data['directions']) 
            
            ### 4. ์ปค์„œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค
            cursor = connection.cursor()
            
            ### 5. ์ฟผ๋ฆฌ๋ฌธ์„ ์ปค์„œ๋กœ ์‹คํ–‰ํ•œ๋‹ค
            cursor.execute(query, record)
            
            ### 6. DB์— ์™„์ „ํžˆ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” commitํ•œ๋‹ค ์•ˆํ•˜๋ฉด rollback๋จ
            connection.commit()
            
            ### 7. ์ž์› ํ•ด์ œ
            cursor.close()
            connection.close()
            
        except Error as e : 
            if cursor is not None :  # null์ด ์•„๋‹ˆ๋ฉด
                cursor.close()
            if connection is not None :
                connection.close()
            return {'result' : 'fail' , 'error' : str(e) } , 500  # 500 ์—๋Ÿฌ
        
        return { 'result' : 'success' } , 200 # 200์€ ๋””ํดํŠธ๊ฐ’์ด๋ฏ€๋กœ ์•ˆ์จ๋„ ๋จ

 

 

 

 

mysql_connection.py ์ž‘์„ฑ

 

- vscode cmd์— connector ์„ค์น˜ 

pip install mysql-connector-python

 

 

 

 

config.py ์ž‘์„ฑ

 

 

 

 

 

์ปจํŠธ๋กค+s๋กœ ํŒŒ์ผ ์ €์žฅ์‹œํ‚ค๊ณ , flask run ํ•˜๊ธฐ

 

 

 

 

์ด ํ™”๋ฉด์ด ๋œจ์ง€ ์•Š์œผ๋ฉด ํŒŒ์ผ ์ €์žฅ์„ ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ž

 

 

 

 

 

 

 

๋‹ค์‹œ Postman์œผ๋กœ ๋Œ์•„์™€ Send๋ฅผ ๋ˆ„๋ฅด๋ฉด success๊ฐ€ ๋œฌ๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ์ฝ”๋“œ์— ์˜คํƒ€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž.